autohell to CMake

6 files changed +138 −1626

  • − Makefile
  • − configure
  • − librhash/Makefile
  • + CMakeLists.txt
  • + librhash/CMakeLists.txt
  • + librhash/librhash.pc.in
1diff --git a/CMakeLists.txt b/CMakeLists.txt
2new file mode 100644
3index 0000000..1ff4d25
4--- /dev/null
5+++ b/CMakeLists.txt
6@@ -0,0 +1,54 @@
7+cmake_minimum_required(VERSION 3.10)
8+project(rhash LANGUAGES C)
9+
10+include(GNUInstallDirs)
11+
12+# extract version from version.h
13+file(READ "${CMAKE_CURRENT_SOURCE_DIR}/version.h" rhash_version_header)
14+string(REGEX MATCH "#define VERSION \"([0-9]+)\\.([0-9]+)\\.([0-9]+)\"" _ "${rhash_version_header}")
15+set(RHASH_VERSION_MAJOR ${CMAKE_MATCH_1})
16+set(RHASH_VERSION_MINOR ${CMAKE_MATCH_2})
17+set(RHASH_VERSION_PATCH ${CMAKE_MATCH_3})
18+set(RHASH_VERSION "${RHASH_VERSION_MAJOR}.${RHASH_VERSION_MINOR}.${RHASH_VERSION_PATCH}")
19+
20+option(USE_GETTEXT "Enable gettext (localization) support" OFF)
21+
22+add_subdirectory(librhash)
23+
24+add_executable(rhash
25+ calc_sums.c
26+ common_func.c
27+ file.c
28+ file_mask.c
29+ file_set.c
30+ find_file.c
31+ hash_check.c
32+ hash_print.c
33+ hash_update.c
34+ output.c
35+ parse_cmdline.c
36+ rhash_main.c
37+ win_utils.c)
38+target_link_libraries(rhash PRIVATE librhash)
39+
40+if(USE_GETTEXT)
41+ find_package(Intl REQUIRED)
42+ target_link_libraries(rhash PRIVATE ${Intl_LIBRARIES})
43+ target_include_directories(rhash PRIVATE ${Intl_INCLUDE_DIRS})
44+ target_compile_definitions(rhash PRIVATE USE_GETTEXT)
45+endif()
46+
47+install(TARGETS rhash RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
48+
49+# rhash picks its default hash/format from argv[0], so installing it under
50+# these names turns it into the matching tool (sfv-hash, magnet-link, etc.)
51+option(INSTALL_SYMLINKS "Install alias symlinks for the rhash executable" ON)
52+if(INSTALL_SYMLINKS)
53+ set(RHASH_SYMLINKS sfv-hash has160-hash gost12-256-hash gost12-512-hash
54+ edonr256-hash edonr512-hash tiger-hash tth-hash whirlpool-hash
55+ ed2k-link magnet-link)
56+ foreach(link IN LISTS RHASH_SYMLINKS)
57+ install(CODE "execute_process(COMMAND \"${CMAKE_COMMAND}\" -E create_symlink \
58+rhash \"\$ENV{DESTDIR}${CMAKE_INSTALL_FULL_BINDIR}/${link}\")")
59+ endforeach()
60+endif()
61diff --git a/Makefile b/Makefile
62deleted file mode 100644
63index 0733ed9..0000000
64--- a/Makefile
65+++ /dev/null
66@@ -1,334 +0,0 @@
67-
68-include config.mak
69-
70-HEADERS = calc_sums.h hash_print.h common_func.h hash_update.h file.h file_mask.h file_set.h find_file.h hash_check.h output.h parse_cmdline.h rhash_main.h win_utils.h platform.h version.h
71-SOURCES = calc_sums.c hash_print.c common_func.c hash_update.c file.c file_mask.c file_set.c find_file.c hash_check.c output.c parse_cmdline.c rhash_main.c win_utils.c
72-OBJECTS = $(SOURCES:.c=.o)
73-WIN_DIST_FILES = dist/MD5.bat dist/magnet.bat dist/rhashrc.sample
74-OTHER_FILES = configure Makefile ChangeLog INSTALL.md COPYING README.md \
75- build/vc-2010/rhash.vcxproj dist/rhash.spec.in dist/rhash.1.in dist/rhash.1.win.sed \
76- docs/CONTRIBUTING.md docs/LIBRHASH.md librhash/Doxyfile po/rhash.pot \
77- tests/test_rhash.sh tests/test1K.data
78-LIBRHASH_FILES = librhash/algorithms.c librhash/algorithms.h \
79- librhash/byte_order.c librhash/byte_order.h librhash/plug_openssl.c librhash/plug_openssl.h \
80- librhash/rhash.c librhash/rhash.h librhash/rhash_torrent.c librhash/rhash_torrent.h \
81- librhash/aich.c librhash/aich.h librhash/blake2b.c librhash/blake2b.h \
82- librhash/blake2s.c librhash/blake2s.h librhash/blake3.c librhash/blake3.h \
83- librhash/crc32.c librhash/crc32.h \
84- librhash/ed2k.c librhash/ed2k.h librhash/edonr.c librhash/edonr.h \
85- librhash/gost12.c librhash/gost12.h librhash/gost94.c librhash/gost94.h \
86- librhash/has160.c librhash/has160.h librhash/hex.c librhash/hex.h librhash/md4.c \
87- librhash/md4.h librhash/md5.c librhash/md5.h librhash/ripemd-160.c librhash/ripemd-160.h \
88- librhash/sha1.c librhash/sha1.h librhash/sha3.c librhash/sha3.h \
89- librhash/sha256.c librhash/sha256.h librhash/sha512.c librhash/sha512.h \
90- librhash/sha_ni.c librhash/sha_ni.h librhash/snefru.c librhash/snefru.h \
91- librhash/tiger.c librhash/tiger.h librhash/tiger_sbox.c \
92- librhash/torrent.h librhash/torrent.c librhash/tth.c librhash/tth.h \
93- librhash/whirlpool.c librhash/whirlpool.h librhash/whirlpool_sbox.c \
94- librhash/test_lib.c librhash/test_lib.h librhash/test_utils.c librhash/test_utils.h \
95- librhash/ustd.h librhash/util.c librhash/util.h librhash/Makefile
96-I18N_FILES = po/ca.po po/de.po po/en_AU.po po/es.po po/fr.po po/gl.po po/it.po po/pt_BR.po po/ro.po po/ru.po po/uk.po
97-ALL_FILES = $(SOURCES) $(HEADERS) $(LIBRHASH_FILES) $(OTHER_FILES) $(WIN_DIST_FILES) $(I18N_FILES)
98-SPECFILE = dist/rhash.spec
99-LIBRHASH_PC = dist/librhash.pc
100-RPMTOP = rpms
101-RPMDIRS = SOURCES SPECS BUILD SRPMS RPMS
102-RHASH_NAME = rhash
103-RHASH_BINARY = rhash$(EXEC_EXT)
104-INSTALL_PROGRAM = $(INSTALL) -m 755
105-INSTALL_DATA = $(INSTALL) -m 644
106-
107-all: $(BUILD_TARGETS)
108-build: $(RHASH_BINARY)
109-lib-shared: $(LIBRHASH_SHARED)
110-lib-static: $(LIBRHASH_STATIC)
111-install: build-install-binary install-data install-symlinks $(EXTRA_INSTALL)
112-install-data: install-man install-conf
113-uninstall: uninstall-binary uninstall-data uninstall-symlinks uninstall-lib uninstall-gmo uninstall-pkg-config
114-
115-config.mak:
116- echo "Run the ./configure script first" && false
117-
118-# creating archives
119-WIN_SUFFIX = win32
120-PACKAGE_NAME = $(RHASH_NAME)-$(VERSION)
121-ARCHIVE_TARGZ = $(PACKAGE_NAME)-src.tar.gz
122-ARCHIVE_TARGZ_CORE = $(RHASH_NAME)-core-$(VERSION)-src.tar.gz
123-ARCHIVE_TARGZ_BINDINGS = $(RHASH_NAME)-bindings-$(VERSION)-src.tar.gz
124-ARCHIVE_TARGZ_DEB = $(RHASH_NAME)_$(VERSION).orig.tar.gz
125-ARCHIVE_XZ = $(PACKAGE_NAME)-src.tar.xz
126-ARCHIVE_ZIP = $(PACKAGE_NAME)-$(WIN_SUFFIX).zip
127-WIN_ZIP_DIR = RHash-$(VERSION)-$(WIN_SUFFIX)
128-dist: tgz
129-win-dist: zip
130-zip: $(ARCHIVE_ZIP)
131-dgz: check $(ARCHIVE_TARGZ_DEB)
132-
133-build-install-binary: $(BUILD_TARGETS)
134- +$(MAKE) install-binary
135-
136-mkdir-bin:
137- $(INSTALL) -d $(BINDIR)
138-
139-# install binary without (re-)compilation
140-install-binary: mkdir-bin
141- $(INSTALL_PROGRAM) $(RHASH_BINARY) $(BINDIR)/$(RHASH_BINARY)
142-
143-install-man:
144- $(INSTALL) -d $(MANDIR)/man1
145- $(INSTALL_DATA) dist/rhash.1 $(MANDIR)/man1/rhash.1
146-
147-install-conf:
148- $(INSTALL) -d $(SYSCONFDIR)
149- tr -d \\r < dist/rhashrc.sample > rc.tmp && $(INSTALL_DATA) rc.tmp $(SYSCONFDIR)/rhashrc
150- rm -f rc.tmp
151-
152-# dependencies should be properly set, otherwise 'make -j<n>' can fail
153-install-symlinks: mkdir-bin install-man install-binary
154- cd $(BINDIR) && for f in $(SYMLINKS); do $(LN_S) $(RHASH_BINARY) $$f$(EXEC_EXT); done
155- cd $(MANDIR)/man1 && for f in $(SYMLINKS); do $(LN_S) rhash.1 $$f.1; done
156-
157-install-pkg-config:
158- $(INSTALL) -d $(PKGCONFIGDIR)
159- $(INSTALL_DATA) $(LIBRHASH_PC) $(PKGCONFIGDIR)/
160-
161-uninstall-binary:
162- rm -f $(BINDIR)/$(RHASH_BINARY)
163-
164-uninstall-data:
165- rm -f $(MANDIR)/man1/rhash.1
166-
167-uninstall-symlinks:
168- for f in $(SYMLINKS); do rm -f $(BINDIR)/$$f$(EXEC_EXT) $(MANDIR)/man1/$$f.1; done
169-
170-uninstall-pkg-config:
171- rm -f $(PKGCONFIGDIR)/librhash.pc
172-
173-uninstall-lib:
174- +cd librhash && $(MAKE) uninstall-lib
175-
176-install-lib-static: $(LIBRHASH_STATIC) install-lib-headers
177- +cd librhash && $(MAKE) install-lib-static
178-
179-install-lib-shared: $(LIBRHASH_SHARED)
180- +cd librhash && $(MAKE) install-lib-shared
181-
182-install-lib-headers:
183- +cd librhash && $(MAKE) install-lib-headers
184-
185-install-lib-so-link:
186- +cd librhash && $(MAKE) install-so-link
187-
188-$(LIBRHASH_SHARED): $(LIBRHASH_FILES)
189- +cd librhash && $(MAKE) lib-shared
190-
191-$(LIBRHASH_STATIC): $(LIBRHASH_FILES)
192- +cd librhash && $(MAKE) lib-static
193-
194-test-lib: test-lib-$(LIBRHASH_TYPE)
195-
196-test-lib-static: $(LIBRHASH_STATIC)
197- +cd librhash && $(MAKE) test-static
198-
199-test-lib-shared: $(LIBRHASH_SHARED)
200- +cd librhash && $(MAKE) test-shared
201-
202-test-libs: $(LIBRHASH_STATIC) $(LIBRHASH_SHARED)
203- +cd librhash && $(MAKE) test-static test-shared
204-
205-test-full: $(RHASH_BINARY)
206- /bin/sh tests/test_rhash.sh $(TEST_OPTIONS) --full ./$(RHASH_BINARY)
207-
208-test: $(RHASH_BINARY)
209- /bin/sh tests/test_rhash.sh $(TEST_OPTIONS) ./$(RHASH_BINARY)
210-
211-print-info: lib-$(LIBRHASH_TYPE)
212- +cd librhash && $(MAKE) print-info
213-
214-# check that source tree is consistent
215-check:
216- grep -q '\* === Version $(VERSION) ===' ChangeLog
217- grep -q '^#define VERSION "$(VERSION)"' version.h
218- test ! -f bindings/version.properties || grep -q '^version=$(VERSION)$$' bindings/version.properties
219-
220-$(RHASH_BINARY): $(OBJECTS) $(LIBRHASH_PATH)
221- $(CC) $(OBJECTS) $(LIBRHASH_PATH) $(LDFLAGS) -o $@
222-
223-# NOTE: dependences were generated by 'gcc -Ilibrhash -MM *.c'
224-# we are using plain old makefile style to support BSD make
225-calc_sums.o: calc_sums.c calc_sums.h common_func.h file.h hash_check.h \
226- file_set.h hash_print.h output.h parse_cmdline.h platform.h rhash_main.h \
227- win_utils.h librhash/rhash.h librhash/rhash_torrent.h
228- $(CC) -c $(CFLAGS) $< -o $@
229-
230-common_func.o: common_func.c common_func.h output.h parse_cmdline.h \
231- version.h win_utils.h
232- $(CC) -c $(CFLAGS) $< -o $@
233-
234-file.o: file.c file.h common_func.h parse_cmdline.h platform.h \
235- win_utils.h
236- $(CC) -c $(CFLAGS) $< -o $@
237-
238-file_mask.o: file_mask.c file_mask.h common_func.h file.h
239- $(CC) -c $(CFLAGS) $< -o $@
240-
241-file_set.o: file_set.c file_set.h common_func.h hash_print.h output.h \
242- parse_cmdline.h rhash_main.h file.h librhash/rhash.h
243- $(CC) -c $(CFLAGS) $< -o $@
244-
245-find_file.o: find_file.c find_file.h common_func.h file.h output.h \
246- parse_cmdline.h platform.h win_utils.h
247- $(CC) -c $(CFLAGS) $< -o $@
248-
249-hash_check.o: hash_check.c hash_check.h file.h file_set.h calc_sums.h \
250- common_func.h hash_print.h output.h parse_cmdline.h rhash_main.h \
251- librhash/rhash.h
252- $(CC) -c $(CFLAGS) $< -o $@
253-
254-hash_print.o: hash_print.c hash_print.h calc_sums.h common_func.h file.h \
255- hash_check.h file_set.h output.h parse_cmdline.h rhash_main.h \
256- win_utils.h librhash/rhash.h
257- $(CC) -c $(CFLAGS) $< -o $@
258-
259-hash_update.o: hash_update.c hash_update.h calc_sums.h common_func.h \
260- file.h hash_check.h file_set.h file_mask.h hash_print.h output.h \
261- parse_cmdline.h rhash_main.h win_utils.h
262- $(CC) -c $(CFLAGS) $< -o $@
263-
264-output.o: output.c output.h calc_sums.h common_func.h file.h hash_check.h \
265- file_set.h parse_cmdline.h platform.h rhash_main.h win_utils.h \
266- librhash/rhash.h
267- $(CC) -c $(CFLAGS) $< -o $@
268-
269-parse_cmdline.o: parse_cmdline.c parse_cmdline.h calc_sums.h \
270- common_func.h file.h hash_check.h file_set.h file_mask.h find_file.h \
271- hash_print.h output.h rhash_main.h win_utils.h librhash/rhash.h
272- $(CC) -c $(CFLAGS) $(CONFCFLAGS) $< -o $@
273-
274-rhash_main.o: rhash_main.c rhash_main.h file.h calc_sums.h common_func.h \
275- hash_check.h file_set.h file_mask.h find_file.h hash_print.h \
276- hash_update.h output.h parse_cmdline.h win_utils.h librhash/rhash.h
277- $(CC) -c $(CFLAGS) $(LOCALECFLAGS) $< -o $@
278-
279-win_utils.o: win_utils.c win_utils.h common_func.h file.h parse_cmdline.h
280- $(CC) -c $(CFLAGS) $< -o $@
281-
282-dist/rhash.1.win.html: dist/rhash.1 dist/rhash.1.win.sed
283- sed -f dist/rhash.1.win.sed dist/rhash.1 | rman -fHTML -roff | \
284- sed -e '/<BODY/s/\(bgcolor=\)"[^"]*"/\1"white"/i' > dist/rhash.1.win.html
285-# verify the result
286- grep -q "utf8" dist/rhash.1.win.html
287- grep -q "APPDATA" dist/rhash.1.win.html
288-
289-dist/rhash.1.html: dist/rhash.1
290- -rman --version 2>/dev/null && (rman -fHTML -roff dist/rhash.1 | sed -e '/<BODY/s/\(bgcolor=\)"[^"]*"/\1"white"/i' > $@)
291-
292-dist/rhash.1.txt: dist/rhash.1
293- -groff --version 2>/dev/null && (groff -t -e -mandoc -Tascii dist/rhash.1 | sed -e 's/.\[[0-9]*m//g' > $@)
294-
295-permissions:
296- find . build dist docs librhash po tests -maxdepth 1 -type f -exec chmod -x '{}' \;
297- chmod +x configure tests/test_rhash.sh
298-
299-copy-dist: $(ALL_FILES) permissions
300- rm -rf $(PACKAGE_NAME)
301- mkdir $(PACKAGE_NAME)
302- cp -rl --parents $(ALL_FILES) $(PACKAGE_NAME)/
303-
304-tgz-core: check
305- +$(MAKE) copy-dist PACKAGE_NAME=$(PACKAGE_NAME)-core
306- tar czf $(ARCHIVE_TARGZ_CORE) --owner=root --group=root $(PACKAGE_NAME)-core/
307- rm -rf $(PACKAGE_NAME)-core
308-
309-tgz-bindings:
310- +cd bindings && $(MAKE) gzip ARCHIVE_GZIP=../$(ARCHIVE_TARGZ_BINDINGS)
311-
312-tgz: check clean-bindings
313- +$(MAKE) copy-dist
314- +cd bindings && $(MAKE) copy-dist COPYDIR=../$(PACKAGE_NAME)/bindings
315- tar czf $(ARCHIVE_TARGZ) --owner=root:0 --group=root:0 $(PACKAGE_NAME)/
316- rm -rf $(PACKAGE_NAME)
317-
318-xz: check clean-bindings
319- +$(MAKE) copy-dist
320- +cd bindings && $(MAKE) copy-dist COPYDIR=../$(PACKAGE_NAME)/bindings
321- tar cJf $(ARCHIVE_XZ) --owner=root:0 --group=root:0 $(PACKAGE_NAME)/
322- rm -rf $(PACKAGE_NAME)
323-
324-win-dir: $(WIN_DIST_FILES) dist/rhash.1.win.html
325- test -s dist/rhash.1.win.html && test -x $(RHASH_BINARY)
326- -rm -rf $(WIN_ZIP_DIR)
327- mkdir $(WIN_ZIP_DIR)
328- cp $(RHASH_BINARY) ChangeLog $(WIN_DIST_FILES) $(WIN_ZIP_DIR)/
329- cp dist/rhash.1.win.html $(WIN_ZIP_DIR)/rhash-doc.html
330-
331-$(ARCHIVE_ZIP): $(WIN_DIST_FILES) dist/rhash.1.win.html
332- +$(MAKE) win-dir
333- zip -9r $(ARCHIVE_ZIP) $(WIN_ZIP_DIR)
334- rm -rf $(WIN_ZIP_DIR)
335-
336-$(ARCHIVE_TARGZ_DEB) : $(ALL_FILES)
337- +$(MAKE) tgz
338- mv -f $(ARCHIVE_TARGZ) $(ARCHIVE_TARGZ_DEB)
339-
340-# rpm packaging
341-$(SPECFILE): $(SPECFILE).in config.mak
342- sed -e 's/@VERSION@/$(VERSION)/' $(SPECFILE).in > $(SPECFILE)
343-
344-rpm: tgz
345- -for i in $(RPMDIRS); do mkdir -p $(RPMTOP)/$$i; done
346- cp -f $(ARCHIVE_TARGZ) $(RPMTOP)/SOURCES
347- rpmbuild -ba --clean --define "_topdir `pwd`/$(RPMTOP)" $(SPECFILE)
348- mv -f `find $(RPMTOP) -name "*rhash*-$(VERSION)*.rpm"` .
349- rm -rf $(RPMTOP)
350-
351-clean-bindings:
352- +cd bindings && $(MAKE) clean
353-
354-clean-local:
355- rm -f *.o $(RHASH_BINARY)
356- rm -f po/*.gmo po/*.po~ po/compile-gmo.tag
357-
358-distclean: clean-local
359- rm -f config.log config.mak dist/rhash.1 $(SPECFILE) $(LIBRHASH_PC)
360- +cd librhash && $(MAKE) distclean
361-
362-clean: clean-local
363- +cd librhash && $(MAKE) clean
364-
365-update-po:
366- xgettext *.c -k_ -cTRANSLATORS -o po/rhash.pot \
367- --msgid-bugs-address='Aleksey <rhash.admin@gmail.com>' --package-name='RHash'
368- for f in $(I18N_FILES); do \
369- msgmerge -U $$f po/rhash.pot; \
370- done
371-
372-po/compile-gmo.tag: $(I18N_FILES)
373- for f in $(I18N_FILES); do \
374- g=`basename $$f .po`; \
375- msgfmt -o po/$$g.gmo $$f; \
376- done
377- touch $@
378-
379-compile-gmo: po/compile-gmo.tag
380-
381-install-gmo: compile-gmo
382- for f in $(I18N_FILES); do \
383- l=`basename $$f .po`; \
384- $(INSTALL) -d $(LOCALEDIR)/$$l/LC_MESSAGES; \
385- $(INSTALL_DATA) po/$$l.gmo $(LOCALEDIR)/$$l/LC_MESSAGES/rhash.mo; \
386- done
387-
388-uninstall-gmo:
389- for f in $(I18N_FILES); do \
390- rm -f $(LOCALEDIR)/`basename $$f .po`/LC_MESSAGES/rhash.mo; \
391- done
392-
393-.PHONY: all build lib-shared lib-static clean clean-bindings distclean clean-local \
394- test test-shared test-static test-full test-lib test-libs test-lib-shared test-lib-static \
395- install build-install-binary install-binary install-lib-shared install-lib-static \
396- install-lib-headers install-lib-so-link install-conf install-data install-gmo install-man \
397- install-symlinks install-pkg-config uninstall-gmo uninstall-pkg-config \
398- uninstall uninstall-binary uninstall-data uninstall-lib uninstall-symlinks \
399- print-info check copy-dist update-po compile-gmo mkdir-bin permissions \
400- dgz dist tgz tgz-bindings tgz-core rpm win-dist win-dir xz zip
401diff --git a/configure b/configure
402deleted file mode 100755
403index 46072c3..0000000
404--- a/configure
405+++ /dev/null
406@@ -1,1063 +0,0 @@
407-#!/bin/sh
408-
409-#####################################################################
410-# set default values
411-OPT_STATIC=auto
412-OPT_OPENSSL=auto
413-OPT_OPENSSL_RUNTIME=auto
414-OPT_GETTEXT=auto
415-OPT_SHANI=auto
416-OPT_CC=
417-
418-export LC_ALL=C
419-CFG_LINE="$*"
420-INSTALL_PREFIX="/usr/local"
421-test -z "$CC" && CC=cc
422-CMD_AR=ar
423-CMD_INSTALL=install
424-BUILD_DEBUG=
425-BUILD_EXTRA_CFLAGS=
426-BUILD_EXTRA_LDFLAGS=
427-RHASH_LOCALE_CFLAGS=
428-RHASH_DEFINES=
429-LIBRHASH_DEFINES=
430-CHECK_LDFLAGS=
431-WARN_CFLAGS="-Wall -W -Wstrict-prototypes -Wnested-externs -Winline -Wpointer-arith -Wbad-function-cast -Wmissing-prototypes -Wmissing-declarations"
432-INSTALL_SYMLINKS="sfv-hash has160-hash gost12-256-hash gost12-512-hash edonr256-hash edonr512-hash tiger-hash tth-hash whirlpool-hash ed2k-link magnet-link"
433-INSTALL_LIB_STATIC=auto
434-INSTALL_LIB_SHARED=auto
435-INSTALL_PKGCONFIGDIR="$PKG_INSTALLDIR"
436-SHARED_LIB_MODE=${SHARED_LIB_MODE:-755}
437-
438-#####################################################################
439-# detect and prepare temp directory
440-for DETECT_TMP in "$TMPDIR" "$TEMPDIR" "/tmp"; do
441- test -d "$DETECT_TMP" && break
442-done
443-RANDNUM=$RANDOM
444-test -z "$RANDNUM" && jot -r 1 2>/dev/null >dev/null && RANDNUM=$(jot -r 1 1 32767) || RANDNUM=0
445-BUILD_TMPDIR="$DETECT_TMP/rhash-configure-$RANDNUM-$$"
446-mkdir $BUILD_TMPDIR || die "Unable to create tmp dir."
447-TMPC="$BUILD_TMPDIR/tmp.c"
448-TMPT="$BUILD_TMPDIR/tmp.txt"
449-TMPBIN="$BUILD_TMPDIR/tmp"
450-TMPLOG="config.log"
451-rm -f "$TMPLOG"
452-echo "Configuration parameters: \"$CFG_LINE\"" > "$TMPLOG"
453-echo "Symlinks to install: $INSTALL_SYMLINKS" >> "$TMPLOG"
454-echo >> "$TMPLOG"
455-
456-remove_tmpdir()
457-{
458- rm -rf "$BUILD_TMPDIR"
459-}
460-trap remove_tmpdir EXIT
461-
462-#####################################################################
463-# display error message and exit
464-die() {
465- echo
466- echo "Error: $@" >&2
467- echo >&2
468- test -f "$TMPLOG" && echo "Error: $@" >> "$TMPLOG"
469- rm -f "$TMPBIN" "$TMPC" "$TMPT"
470- echo "Check \"$TMPLOG\" if you do not understand why it failed."
471- exit 1
472-}
473-
474-#####################################################################
475-# helper functions for options parsing
476-print_help()
477-{
478- cat << EOF
479-Usage: configure [OPTIONS]...
480-
481-Generic Options:
482- -h, --help display this help and exit
483- --cc=COMPILER C compiler to build RHash [gcc]
484- --ar=AR librarian to build RHash [ar]
485- --target=PLATFORM target platform (i386-linux, arm-linux, etc)
486- --with-install=PATH path to a custom install program
487-
488-Directory Options:
489- --prefix=DIR prefix directory for installation [/usr/local]
490- --exec-prefix=DIR prefix directory for binaries [PREFIX]
491- --bindir=DIR directory for installing binaries [EXEC_PREFIX/bin]
492- --sysconfdir=DIR directory to look for configuration file
493- [PREFIX/etc]
494- --mandir=DIR directory for installing man pages [PREFIX/share/man]
495- --libdir=DIR directory for the rhash library [EXEC_PREFIX/lib]
496- --pkgconfigdir=DIR directory for pkg-config files [LIBDIR/pkgconfig]
497- --localedir=DIR directory for locale files [PREFIX/share/locale]
498-
499-Features options:
500- --disable-FEATURE do not include FEATURE
501- --enable-gettext enable gettext (localization) support [autodetect]
502- --enable-openssl[=runtime] enable OpenSSL (optimized hash functions) support.
503- If runtime specified, then load OpenSSL at runtime if
504- the library is found [autodetect]
505- --enable-debug enable debug information [disable]
506- --enable-static[=librhash] statically link all libraries or (if =librhash)
507- only the LibRHash library into RHash binary [disable]
508- --enable-lib-static build and install LibRHash static library [auto]
509- --enable-lib-shared build and install LibRHash shared library [auto]
510- --enable-symlinks[=LIST] install symlinks to the binary [enable]
511-
512-Use these options if autodetection fails:
513- --extra-cflags=FLAGS extra CFLAGS
514- --extra-ldflags=FLAGS extra LDFLAGS
515-EOF
516-exit 0
517-}
518-
519-check_set_contains()
520-{
521- VALUE="$1"
522- shift
523- for VALID_VALUE do
524- if test "$VALUE" = "$VALID_VALUE"; then
525- return 0
526- fi
527- shift
528- done
529- return 1
530-}
531-
532-get_opt_value()
533-{
534- echo $(echo $* | cut -d '=' -f 2-)
535-}
536-
537-#####################################################################
538-# parse the command line options passed to the configure script
539-for OPT do
540- case "$OPT" in
541- --help|-help|-h)
542- print_help
543- ;;
544- --prefix=*)
545- INSTALL_PREFIX=$(get_opt_value $OPT)
546- ;;
547- --exec-prefix=*)
548- INSTALL_EXEC_PREFIX=$(get_opt_value $OPT)
549- INSTALL_EXEC_PREFIX_SET=yes
550- ;;
551- --bindir=*)
552- INSTALL_BINDIR=$(get_opt_value $OPT)
553- ;;
554- --mandir=*)
555- INSTALL_MANDIR=$(get_opt_value $OPT)
556- ;;
557- --sysconfdir=*)
558- INSTALL_SYSCONFDIR=$(get_opt_value $OPT)
559- ;;
560- --libdir=*)
561- INSTALL_LIBDIR=$(get_opt_value $OPT)
562- ;;
563- --pkgconfigdir=*)
564- INSTALL_PKGCONFIGDIR=$(get_opt_value $OPT)
565- ;;
566- --localedir=*)
567- INSTALL_LOCALEDIR=$(get_opt_value $OPT)
568- ;;
569- --enable-gettext)
570- OPT_GETTEXT=yes
571- ;;
572- --disable-gettext)
573- OPT_GETTEXT=no
574- ;;
575- --disable-shani)
576- OPT_SHANI=no
577- ;;
578- --enable-openssl)
579- OPT_OPENSSL=yes
580- ;;
581- --enable-openssl=*)
582- OPT_OPENSSL=$(get_opt_value $OPT)
583- check_set_contains "$OPT_OPENSSL" "runtime" || die "Unexpected option value: $OPT"
584- ;;
585- --disable-openssl)
586- OPT_OPENSSL=no
587- ;;
588- --enable-openssl-runtime)
589- OPT_OPENSSL=runtime # legacy option
590- echo "warning: use --enable-openssl=runtime instead of $OPT" >> "$TMPLOG"
591- ;;
592- --disable-openssl-runtime)
593- OPT_OPENSSL=yes # legacy option
594- echo "warning: use --enable-openssl instead of $OPT" >> "$TMPLOG"
595- ;;
596- --target=*)
597- BUILD_TARGET=$(get_opt_value $OPT)
598- ;;
599- --cc=*)
600- CC=$(get_opt_value $OPT)
601- OPT_CC=1
602- ;;
603- --ar=*)
604- CMD_AR=$(get_opt_value $OPT)
605- ;;
606- --enable-static)
607- OPT_STATIC=yes
608- ;;
609- --enable-static=librhash)
610- OPT_STATIC=librhash
611- ;;
612- --disable-static)
613- OPT_STATIC=no
614- ;;
615- --enable-lib-static)
616- INSTALL_LIB_STATIC=yes
617- ;;
618- --disable-lib-static)
619- INSTALL_LIB_STATIC=no
620- ;;
621- --enable-lib-shared)
622- INSTALL_LIB_SHARED=yes
623- ;;
624- --disable-lib-shared)
625- INSTALL_LIB_SHARED=no
626- ;;
627- --enable-symlinks)
628- # use default INSTALL_SYMLINKS list
629- ;;
630- --enable-symlinks=*)
631- INSTALL_SYMLINKS=$(get_opt_value $OPT)
632- ;;
633- --disable-symlinks)
634- INSTALL_SYMLINKS=
635- ;;
636- --enable-debug)
637- BUILD_DEBUG='-g'
638- ;;
639- --enable-debug=*)
640- BUILD_DEBUG='-g '$(get_opt_value $OPT)
641- ;;
642- --disable-debug)
643- BUILD_DEBUG=
644- ;;
645- --with-install=*)
646- CMD_INSTALL=$(get_opt_value $OPT)
647- ;;
648- --extra-cflags=*)
649- BUILD_EXTRA_CFLAGS="$BUILD_EXTRA_CFLAGS $(get_opt_value $OPT)"
650- ;;
651- --extra-ldflags=*)
652- BUILD_EXTRA_LDFLAGS="$BUILD_EXTRA_LDFLAGS $(get_opt_value $OPT)"
653- ;;
654- *)
655- echo "unknown option $OPT"
656- exit 1
657- ;;
658- esac
659- shift
660-done
661-
662-#####################################################################
663-# set variables which use INSTALL_PREFIX
664-test -z "$INSTALL_EXEC_PREFIX_SET" && INSTALL_EXEC_PREFIX="$INSTALL_PREFIX"
665-test -z "$INSTALL_BINDIR" && INSTALL_BINDIR="$INSTALL_EXEC_PREFIX/bin"
666-test -z "$INSTALL_MANDIR" && INSTALL_MANDIR="$INSTALL_PREFIX/share/man"
667-test -z "$INSTALL_SYSCONFDIR" && INSTALL_SYSCONFDIR="$INSTALL_PREFIX/etc"
668-test -z "$INSTALL_INCDIR" && INSTALL_INCDIR="$INSTALL_PREFIX/include"
669-test -z "$INSTALL_LIBDIR" && INSTALL_LIBDIR="$INSTALL_EXEC_PREFIX/lib"
670-test -z "$INSTALL_PKGCONFIGDIR" && INSTALL_PKGCONFIGDIR="$INSTALL_LIBDIR/pkgconfig"
671-test -z "$INSTALL_LOCALEDIR" && INSTALL_LOCALEDIR="$INSTALL_PREFIX/share/locale"
672-
673-#####################################################################
674-# logging functions
675-log_start()
676-{
677- echo "============ Checking for $1 ============" >> "$TMPLOG"
678-}
679-
680-log_finish()
681-{
682- echo "=============================================" >> "$TMPLOG"
683- echo "" >> "$TMPLOG"
684-}
685-
686-# echo and log a start of a check
687-start_check() {
688- log_start "$1"
689- printf '%s' "Checking for $1 ... "
690- res_comment=""
691-}
692-
693-# echo and log the results of a check
694-finish_check() {
695- if test -n "$res_comment"; then
696- res_comment="($res_comment)"
697- fi
698- echo "Result is: $1 $res_comment" >> "$TMPLOG"
699- log_finish
700- echo "$1 $res_comment"
701- res_comment=""
702-}
703-
704-#####################################################################
705-# detect source directories
706-start_check "sources"
707-HAS_RHASH=no
708-HAS_LIBRHASH=no
709-HAS_BINDINGS=no
710-RHASH_VERSION=
711-RHASH_VERSION_MAJOR=
712-RHASH_XVERSION=
713-BINDINGS_VERSION=
714-RHASH_SRC=
715-LIBRHASH_SRC=
716-LIBRHASH_PC=
717-BINDINGS_SRC=
718-SRC_FOUND=no
719-test -f Makefile || die "Makefile not found"
720-if test -f rhash_main.c; then
721- HAS_RHASH=yes
722- SRC_FOUND=RHash
723- if test -d librhash; then
724- HAS_LIBRHASH=yes
725- LIBRHASH_SRC=librhash/
726- fi
727- if test -f bindings/version.properties; then
728- HAS_BINDINGS=yes
729- BINDINGS_SRC=bindings/
730- fi
731-elif test -f rhash.c; then
732- HAS_LIBRHASH=yes
733- SRC_FOUND=LibRHash
734-elif test -f version.properties; then
735- HAS_BINDINGS=yes
736- SRC_FOUND="RHash bindings"
737-fi
738-echo "RHASH_SRC=$RHASH_SRC, LIBRHASH_SRC=$LIBRHASH_SRC, BINDINGS_SRC=$BINDINGS_SRC" >> "$TMPLOG"
739-
740-#####################################################################
741-# check RHash version
742-good_version() { echo "$1" | grep -q '^[1-9]\.[1-9][0-9]*\.[0-9]' ; }
743-if test "$HAS_RHASH" = "yes" || test "$HAS_LIBRHASH" = "yes"; then
744- test -f "${RHASH_SRC}version.h" || die "${RHASH_SRC}version.h not found"
745- RHASH_VERSION=$(cut -d'"' -f2 "${RHASH_SRC}version.h")
746- echo "RHASH_VERSION=$RHASH_VERSION" >> "$TMPLOG"
747- good_version "$RHASH_VERSION" || die "wrong version: $RHASH_VERSION"
748- _v1=$(echo $RHASH_VERSION | cut -d '.' -f 1)
749- _v2=$(echo $RHASH_VERSION | cut -d '.' -f 2)
750- _v3=$(echo $RHASH_VERSION | cut -d '.' -f 3)
751- RHASH_VERSION_MAJOR=$_v1
752- RHASH_XVERSION=$(printf "0x%02x%02x%02x%02x" "$_v1" "$_v2" "$_v3" 0)
753- test "$HAS_LIBRHASH" = "yes" && LIBRHASH_PC=dist/librhash.pc
754-fi
755-if test "$HAS_BINDINGS" = "yes"; then
756- BINDINGS_VERSION=$(cut -d = -f 2 "${BINDINGS_SRC}version.properties")
757- echo "BINDINGS_VERSION=$BINDINGS_VERSION" >> "$TMPLOG"
758- good_version "$BINDINGS_VERSION" || die "wrong bindings version: $BINDINGS_VERSION"
759- test -z "$RHASH_VERSION" && RHASH_VERSION="$BINDINGS_VERSION"
760-fi
761-test -n "$RHASH_VERSION" && SRC_FOUND="$SRC_FOUND $RHASH_VERSION"
762-finish_check "$SRC_FOUND"
763-test "$SRC_FOUND" = "no" && die "sources not found"
764-
765-if test "$HAS_BINDINGS" = "yes" && test "$BINDINGS_VERSION" != "$RHASH_VERSION"; then
766- echo "Updating ${BINDINGS_SRC}version.properties"
767- echo "version=$RHASH_VERSION" > ${BINDINGS_SRC}version.properties
768-fi
769-
770-#####################################################################
771-# helper functions for compilation checks
772-join_params()
773-{
774- printf '%s ' $@ | sed -e 's/ $//'
775-}
776-
777-run_cmd() {
778- echo "Run: $@" >> "$TMPLOG"
779- $@ >> "$TMPLOG" 2>&1
780- TMPRES="$?"
781- echo "Run result: $TMPRES" >> "$TMPLOG"
782- echo >> "$TMPLOG"
783- return "$TMPRES"
784-}
785-
786-yn_nonempty()
787-{
788- test -n "$1" && echo yes || echo no;
789-}
790-
791-# try to run a source file compilation and return the exit code
792-compile_check() {
793- source="$1"
794- shift
795- echo >> "$TMPLOG"
796- echo "----- source file: $source -----" >> "$TMPLOG"
797- cat "$source" >> "$TMPLOG"
798- echo "----- end of file: $source -----" >> "$TMPLOG"
799- echo "$CC $OPTFLAGS $WARN_CFLAGS $source $BUILD_EXTRA_CFLAGS $BUILD_EXTRA_LDFLAGS $CHECK_LDFLAGS -o $TMPBIN $@" >> "$TMPLOG"
800- rm -f "$TMPBIN"
801- $CC $OPTFLAGS $WARN_CFLAGS "$source" $BUILD_EXTRA_CFLAGS $BUILD_EXTRA_LDFLAGS $CHECK_LDFLAGS -o "$TMPBIN" "$@" >> "$TMPLOG" 2>&1
802- TMPRES="$?"
803- echo "Compilation result: $TMPRES" >> "$TMPLOG"
804- echo >> "$TMPLOG"
805- return "$TMPRES"
806-}
807-
808-cc_check() {
809- compile_check $TMPC $@
810-}
811-
812-create_c_file() {
813- rm -f "$TMPC"
814- if test -n "$1"; then
815- echo "#include <$1>" > $TMPC || die "Can't write to the $TMPC file"
816- fi
817-}
818-
819-cc_check_macro() {
820- create_c_file "$1"
821- cat >> $TMPC << EOF
822-#ifndef $2
823-#error condition not true: $2
824-#endif
825-int main(void) { return 0; }
826-EOF
827- shift 2
828- cc_check $@
829-}
830-
831-cc_check_cflag() {
832- echo "int main(void) { return 0; }" > $TMPC
833- cc_check $@
834-}
835-
836-cc_check_headers() {
837- rm -f "$TMPC"
838- while test -n "$1"; do
839- echo "#include <$1>" >> $TMPC
840- shift
841- done
842- echo "int main(void) { return 0; }" >> $TMPC
843- cc_check "-c"
844-}
845-
846-cc_check_statement() {
847- create_c_file "$1"
848- cat >> $TMPC << EOF
849-int main(void) {
850- $2
851- return 0;
852-}
853-EOF
854- shift 2
855- cc_check $@
856-}
857-
858-#####################################################################
859-# detect host and target OS
860-start_check "target OS"
861-HOST_OS=$(uname -s 2>&1)
862-case "$HOST_OS" in
863- Linux|FreeBSD|NetBSD|OpenBSD|DragonFly|BSD/OS|Darwin|SunOS|QNX|GNU|MorphOS|AIX|AmigaOS|Haiku)
864- ;;
865- IRIX*)
866- HOST_OS=IRIX
867- ;;
868- GNU/kFreeBSD)
869- HOST_OS=FreeBSD
870- ;;
871- HP-UX*)
872- HOST_OS=HP-UX
873- ;;
874- MINGW32*)
875- HOST_OS=MINGW32
876- ;;
877- MINGW64*)
878- HOST_OS=MINGW64
879- ;;
880- MSYS*)
881- HOST_OS=MSYS
882- ;;
883- [cC][yY][gG][wW][iI][nN]*)
884- HOST_OS=CYGWIN
885- ;;
886- OS/2*)
887- HOST_OS=OS/2
888- ;;
889- *)
890- HOST_OS="$HOST_OS-UNKNOWN"
891- ;;
892-esac
893-
894-if test -z "$BUILD_TARGET"; then
895- # host's CPU/instruction set
896- set_host_arch() {
897- case "$1" in
898- x86_64|amd64|i[3-9]86*|i86pc|x86|x86pc|k5|k6|k6_2|k6_3|k6-2|k6-3|pentium*|athlon*|i586_i686|i586-i686) HOST_ARCH=i386 ;;
899- ia64) HOST_ARCH=ia64 ;;
900- macppc|ppc*|Power*) HOST_ARCH=ppc ;;
901- alpha) HOST_ARCH=alpha ;;
902- sun4*|sparc*) HOST_ARCH=sparc ;;
903- parisc*|hppa*|9000*) HOST_ARCH=hppa ;;
904- aarch64*) HOST_ARCH=aarch64 ;;
905- arm*|zaurus|cats) HOST_ARCH=arm ;;
906- sh3|sh4|sh4a) HOST_ARCH=sh ;;
907- s390) HOST_ARCH=s390 ;;
908- s390x) HOST_ARCH=s390x ;;
909- sw_64) HOST_ARCH=sw_64 ;;
910- *mips*) HOST_ARCH=mips ;;
911- nios2) HOST_ARCH=nios2 ;;
912- vax) HOST_ARCH=vax ;;
913- xtensa*) HOST_ARCH=xtensa ;;
914- *) HOST_ARCH=UNKNOWN ;;
915- esac
916- }
917- set_host_arch "$(uname -m 2>&1)"
918- if test "$HOST_ARCH" = UNKNOWN; then
919- set_host_arch "$(uname -p 2>&1)"
920- fi
921- TARGET_OS="$HOST_OS"
922- TARGET_ARCH="$HOST_ARCH"
923-else
924- set_target_os() {
925- component=$1
926- part=$(echo $BUILD_TARGET | cut -d '-' -f $component)
927- case "$(echo $part | tr '[A-Z]' '[a-z]')" in
928- linux|uclinux) TARGET_OS=Linux ;;
929- freebsd*) TARGET_OS=FreeBSD ;;
930- gnu/kfreebsd) TARGET_OS=FreeBSD ;;
931- netbsd) TARGET_OS=NetBSD ;;
932- bsd/os) TARGET_OS=BSD/OS ;;
933- openbsd) TARGET_OS=OpenBSD ;;
934- dragonfly) TARGET_OS=DragonFly ;;
935- sunos|solaris2.*) TARGET_OS=SunOS ;;
936- qnx) TARGET_OS=QNX ;;
937- morphos) TARGET_OS=MorphOS ;;
938- amigaos) TARGET_OS=AmigaOS ;;
939- mingw32*) TARGET_OS=MINGW32 ;;
940- wine) TARGET_OS=Wine ;;
941- darwin*) TARGET_OS=Darwin ;;
942- cygwin*) TARGET_OS=CYGWIN ;;
943- gnu) TARGET_OS=GNU ;;
944- esac
945- }
946- TARGET_OS="UNKNOWN"
947- set_target_os 3
948- if test "$TARGET_OS" = UNKNOWN; then
949- set_target_os 2
950- fi
951- TARGET_ARCH=$(echo $BUILD_TARGET | cut -d '-' -f 1)
952- if test "$(echo $TARGET_ARCH)" != "x86_64"; then
953- TARGET_ARCH=$(echo $TARGET_ARCH | tr '_' '-')
954- fi
955-fi
956-
957-echo "Host OS : $HOST_OS" >> "$TMPLOG"
958-echo "Target OS : $TARGET_OS" >> "$TMPLOG"
959-echo "Target ARCH: $TARGET_ARCH" >> "$TMPLOG"
960-finish_check "$TARGET_OS"
961-test "$TARGET_OS" = UNKNOWN && die "Unknown target OS, please specify the --target option"
962-
963-OS_LC="$(echo $TARGET_OS | tr '[A-Z]' '[a-z]')"
964-aix() { test "$OS_LC" = "aix"; }
965-amigaos() { test "$OS_LC" = "amigaos"; }
966-bsdos() { test "$OS_LC" = "bsd/os"; }
967-darwin() { test "$OS_LC" = "darwin"; }
968-dragonfly() { test "$OS_LC" = "dragonfly"; }
969-freebsd() { test "$OS_LC" = "freebsd" || test "$OS_LC" = "gnu/kfreebsd"; }
970-gnu() { test "$OS_LC" = "gnu"; }
971-hpux() { test "$OS_LC" = "hp-ux"; }
972-irix() { test "$OS_LC" = "irix"; }
973-linux() { test "$OS_LC" = "linux"; }
974-mingw32() { test "$OS_LC" = "mingw32"; }
975-mingw64() { test "$OS_LC" = "mingw64"; }
976-msys() { test "$OS_LC" = "msys"; }
977-cygwin() { test "$OS_LC" = "cygwin"; }
978-netbsd() { test "$OS_LC" = "netbsd"; }
979-openbsd() { test "$OS_LC" = "openbsd"; }
980-os2() { test "$OS_LC" = "os/2"; }
981-qnx() { test "$OS_LC" = "qnx"; }
982-sunos() { test "$OS_LC" = "sunos"; }
983-wine() { test "$OS_LC" = "wine"; }
984-win32() { cygwin || mingw32 || mingw64 || msys || wine; }
985-bsd() { dragonfly || freebsd || netbsd || openbsd ; }
986-posix_make() { aix || bsdos || hpux || irix || qnx || sunos; }
987-
988-#####################################################################
989-# Checking CC version...
990-# Intel C++ Compilers (no autoselect, use CC=/some/binary ./configure)
991-cc_vendor=
992-if test "$(basename $CC)" = "icc" || test "$(basename $CC)" = "ecc"; then
993- start_check "$CC version"
994- cc_vendor=intel
995- cc_name=$($CC -V 2>&1 | head -n 1 | cut -d ',' -f 1)
996- cc_version=$($CC -V 2>&1 | head -n 1 | cut -d ',' -f 2 | cut -d ' ' -f 3)
997- _cc_major=$(echo $cc_version | cut -d '.' -f 1)
998- _cc_minor=$(echo $cc_version | cut -d '.' -f 2)
999- case $cc_version in
1000- '')
1001- cc_version="v. ?.??, bad"
1002- cc_fail=yes
1003- ;;
1004- 10.1|11.1|12.*|13.*|20*)
1005- cc_version="$cc_version, ok"
1006- ;;
1007- *)
1008- cc_version="$cc_version, bad"
1009- cc_fail=yes
1010- ;;
1011- esac
1012- finish_check "$cc_version"
1013-else
1014- CC_TMP="$CC"
1015- test -n "$OPT_CC" && OTHER_CC= || OTHER_CC="gcc cc"
1016- for CC in "$CC_TMP" $OTHER_CC; do
1017- cc_name_tmp=
1018- if run_cmd "$CC -v"; then
1019- cc_name_tmp=$($CC -v 2>&1 | tail -n 1 | cut -d ' ' -f 1)
1020- elif run_cmd "$CC --version"; then
1021- cc_name_tmp=$($CC --version 2>&1 | head -n 1 | cut -d ' ' -f 1)
1022- fi
1023- if echo "$cc_name_tmp" | grep -q "gcc"; then
1024- cc_name=$cc_name_tmp
1025- start_check "$CC version"
1026- cc_vendor=gnu
1027- cc_version=$($CC -dumpversion 2>&1)
1028- if ! echo $cc_version | grep -q '^[0-9][0-9]*\.[0-9]'; then
1029- cc_v2=$($CC -dumpfullversion -dumpversion 2>/dev/null)
1030- if echo $cc_v2 | grep -q '^[0-9][0-9]*\.[0-9]'; then
1031- cc_version=$cc_v2
1032- fi
1033- fi
1034- case $cc_version in
1035- 2.96*)
1036- cc_fail=yes
1037- ;;
1038- *)
1039- _cc_major=$(echo $cc_version | cut -d '.' -f 1)
1040- _cc_minor=$(echo $cc_version | cut -d '.' -f 2)
1041- _cc_mini=$(echo $cc_version | cut -d '.' -f 3)
1042- ;;
1043- esac
1044- finish_check "$cc_name $cc_version"
1045- break
1046- elif $CC --version 2>&1 | grep -q "clang"; then
1047- start_check "$CC version"
1048- cc_vendor=clang
1049- cc_version=$($CC -dumpversion 2>&1)
1050- finish_check "clang $cc_version"
1051- break
1052- else
1053- cc_name_tmp=$($CC -V 2>&1 | head -n 1 | cut -d ' ' -f 2,3)
1054- if test "$cc_name_tmp" = "Sun C"; then
1055- start_check "$CC version"
1056- cc_vendor=sun
1057- cc_version=$($CC -V 2>&1 | head -n 1 | cut -d ' ' -f 4)
1058- res_comment="experimental support"
1059- finish_check "Sun C $cc_version"
1060- break
1061- fi
1062- fi
1063- done
1064-fi # icc
1065-test -z "$cc_vendor" && die "compiler not found"
1066-test "$cc_fail" = "yes" && die "unsupported compiler version"
1067-
1068-log_start "compiler working with default options"
1069-if ! cc_check_cflag; then
1070- die "compiler doesn't work"
1071-fi
1072-log_finish
1073-
1074-if test "$cc_name" = "gcc" && test "$_cc_major" -gt 3; then
1075- WARN_CFLAGS="$WARN_CFLAGS -Wdeclaration-after-statement"
1076-fi
1077-
1078-#####################################################################
1079-# select optimization flags
1080-has_optimization()
1081-{
1082- # posix-compatible way to find -O<n> option
1083- for OPT in $BUILD_EXTRA_CFLAGS $BUILD_DEBUG; do
1084- case "$OPT" in
1085- -O[0-3]|-O) return 0 ;;
1086- esac
1087- done
1088- return 1
1089-}
1090-has_optimization && OPTLEVEL= || OPTLEVEL="-O2"
1091-test -n "$BUILD_DEBUG" && OPTNDEBUG= || OPTNDEBUG="-DNDEBUG"
1092-OPTFLAGS="-pipe -ffunction-sections -fdata-sections"
1093-check_set_contains "-fno-omit-frame-pointer" $BUILD_EXTRA_CFLAGS $BUILD_DEBUG \
1094- || OPTFLAGS="$OPTFLAGS -fomit-frame-pointer"
1095-OPTFLAGS=$(join_params $BUILD_DEBUG $OPTLEVEL $OPTNDEBUG $OPTFLAGS)
1096-LIBRHASH_OPTFLAGS=$OPTFLAGS
1097-
1098-# test that compiler works with options specified by command line
1099-log_start "compiler working with provided options"
1100-if ! cc_check_cflag; then
1101- die "wrong compiler options provided"
1102-fi
1103-log_finish
1104-
1105-#####################################################################
1106-# detect proper shared library name
1107-SHARED_PREFIX="lib"
1108-STATIC_PREFIX="lib"
1109-STATIC_EXT=".a"
1110-SHARED_EXT=".so.${RHASH_VERSION_MAJOR}"
1111-SO_MAJ_EXT=".so.${RHASH_VERSION_MAJOR}"
1112-SOLINK_EXT=".so"
1113-EXEC_EXT=
1114-NEED_IMPLIB=no
1115-NEED_SOLINK=yes
1116-INSTALL_SO_DIR=$INSTALL_LIBDIR
1117-LN_S="ln -sf"
1118-if win32; then
1119- LN_S="cp -pR"
1120- EXEC_EXT=".exe"
1121- SHARED_EXT=".dll"
1122- SO_MAJ_EXT=$SHARED_EXT
1123- NEED_IMPLIB=yes
1124- NEED_SOLINK=no
1125- INSTALL_SO_DIR=$INSTALL_BINDIR
1126- if msys; then
1127- SHARED_PREFIX="msys-"
1128- elif cygwin; then
1129- SHARED_PREFIX="cyg"
1130- fi
1131-elif darwin; then
1132- SHARED_EXT=".${RHASH_VERSION}.dylib"
1133- SO_MAJ_EXT=".${RHASH_VERSION_MAJOR}.dylib"
1134- SOLINK_EXT=".dylib"
1135-elif linux || bsd || gnu; then
1136- # use the full library version for the library file extension
1137- SHARED_EXT=".so.${RHASH_VERSION}"
1138-fi
1139-
1140-#####################################################################
1141-# check for linker flags
1142-LD_STATIC=
1143-test "$OPT_STATIC" = "auto" && OPT_STATIC=no
1144-if test "$OPT_STATIC" = "yes"; then
1145- LD_STATIC=-static
1146- test "$OPT_OPENSSL" = "runtime" && ! win32 && LD_STATIC=
1147-fi
1148-
1149-if test -n "$LD_STATIC"; then
1150- start_check "linker support for $LD_STATIC"
1151- if cc_check_cflag "$LD_STATIC"; then
1152- test "$OPT_STATIC" = "yes" && CHECK_LDFLAGS=$LD_STATIC
1153- else
1154- LD_STATIC=
1155- fi
1156- finish_check $(yn_nonempty "$LD_STATIC")
1157-fi
1158-
1159-LIBDL_LDFLAGS=
1160-if win32; then
1161- ALLOW_RUNTIME_LINKING=yes
1162-elif test "$OPT_STATIC" = "yes"; then
1163- ALLOW_RUNTIME_LINKING=no
1164- test "$OPT_OPENSSL" = "runtime" && die "static linking is incompatible with OpenSSL runtime loading"
1165-elif test "$OPT_OPENSSL" = "auto" || test "$OPT_OPENSSL" = "runtime"; then
1166- start_check "linker support for dlopen"
1167- ALLOW_RUNTIME_LINKING=no
1168- if cc_check_statement "dlfcn.h" 'dlopen("", RTLD_NOW);'; then
1169- ALLOW_RUNTIME_LINKING=yes
1170- elif cc_check_statement "dlfcn.h" 'dlopen("", RTLD_NOW);' "-ldl"; then
1171- ALLOW_RUNTIME_LINKING=yes
1172- LIBDL_LDFLAGS="-ldl"
1173- fi
1174- finish_check "$ALLOW_RUNTIME_LINKING"
1175-fi
1176-
1177-HAS_SSE4=no
1178-HAS_X86_SSE4_SHANI="no"
1179-if test "$OPT_SHANI" = "auto"; then
1180- start_check "sha1 intrinsics"
1181- if cc_check_statement "x86intrin.h" \
1182- "__m128i a = _mm_setzero_si128(); (void)_mm_extract_epi32(a, 0);" \
1183- "-msse4"; then
1184- HAS_SSE4=yes
1185- # Now check for the SHANI extension
1186- if cc_check_statement "x86intrin.h" \
1187- "__m128i a = _mm_setzero_si128(); a = _mm_sha1rnds4_epu32(a, a, 0);" \
1188- "-msse4 -msha";
1189- then
1190- HAS_X86_SSE4_SHANI=yes
1191- # Add all SHANI options to the LIBRHASH_OPTFLAGS, so it can be overriden by
1192- # distro-specific OPTFLAGS, but only all together
1193- LIBRHASH_OPTFLAGS=$(join_params $LIBRHASH_OPTFLAGS -DRHASH_SSE4_SHANI -msse4 -msha)
1194- fi
1195- fi
1196- finish_check "$HAS_X86_SSE4_SHANI"
1197-fi
1198-
1199-SHARED_VSCRIPT=
1200-if ! darwin; then
1201- start_check "linker support for --version-script"
1202- echo "{ local: *; };" > $TMPT
1203- cc_check_cflag "-Wl,--version-script,$TMPT -shared" &&
1204- SHARED_VSCRIPT=",--version-script,exports.sym"
1205- finish_check $(yn_nonempty "$SHARED_VSCRIPT")
1206-fi
1207-
1208-WIN_LDFLAGS=
1209-if win32; then
1210- start_check "linker support for --nxcompat --no-seh --dynamicbase"
1211- cc_check_cflag "-Wl,--nxcompat,--no-seh,--dynamicbase" &&
1212- WIN_LDFLAGS="-Wl,--nxcompat,--no-seh,--dynamicbase"
1213- finish_check $(yn_nonempty "$WIN_LDFLAGS")
1214-fi
1215-
1216-#####################################################################
1217-# detect shared and static library names and build flags
1218-LIBRHASH_STATIC="${STATIC_PREFIX}rhash${STATIC_EXT}"
1219-LIBRHASH_SHARED="${SHARED_PREFIX}rhash${SHARED_EXT}"
1220-LIBRHASH_SO_MAJ="${SHARED_PREFIX}rhash${SO_MAJ_EXT}"
1221-LIBRHASH_SOLINK="${SHARED_PREFIX}rhash${SOLINK_EXT}"
1222-LIBRHASH_SOLINK_TARGET=
1223-test "$NEED_SOLINK" = "yes" && LIBRHASH_SOLINK_TARGET=$LIBRHASH_SOLINK
1224-LIBRHASH_DEF="${SHARED_PREFIX}rhash.def"
1225-LIBRHASH_IMPLIB="${STATIC_PREFIX}rhash${SO_MAJ_EXT}${STATIC_EXT}"
1226-LIBRHASH_EXPORTS_FILE="exports.sym"
1227-LIBRHASH_EXPORTS_SKIP="rhash_wfile"
1228-LIBRHASH_EXPORTS_TARGET=
1229-LIBRHASH_SH_CFLAGS=""
1230-LIBRHASH_SH_LDFLAGS=""
1231-LIBRHASH_RM_FILES=
1232-if win32; then
1233- LIBRHASH_SH_CFLAGS="-DRHASH_EXPORTS"
1234- LIBRHASH_SH_LDFLAGS="-shared -Wl,--out-implib=${LIBRHASH_IMPLIB}${SHARED_VSCRIPT},--output-def,${LIBRHASH_DEF}"
1235- test -n "$SHARED_VSCRIPT" && LIBRHASH_EXPORTS_TARGET=$LIBRHASH_EXPORTS_FILE
1236- LIBRHASH_RM_FILES="${LIBRHASH_IMPLIB} ${LIBRHASH_DEF}"
1237- LIBRHASH_EXPORTS_SKIP="__NO_SKIP__"
1238-elif darwin; then
1239- LIBRHASH_SH_CFLAGS="-fpic"
1240- LIBRHASH_SH_LDFLAGS='-dynamiclib -Wl,-install_name,$(LIBRHASH_SO_MAJ)/$@'
1241-else
1242- LIBRHASH_SH_CFLAGS="-fpic"
1243- LIBRHASH_SH_LDFLAGS="-shared -Wl${SHARED_VSCRIPT},-soname,\$(LIBRHASH_SO_MAJ)"
1244- test -n "$SHARED_VSCRIPT" && LIBRHASH_EXPORTS_TARGET=$LIBRHASH_EXPORTS_FILE
1245-fi
1246-test "x$LIBRHASH_SO_MAJ" != "x$LIBRHASH_SHARED" && LIBRHASH_RM_FILES="$LIBRHASH_RM_FILES $LIBRHASH_SO_MAJ"
1247-LIBRHASH_RM_FILES=$(join_params $LIBRHASH_RM_FILES $LIBRHASH_EXPORTS_TARGET $LIBRHASH_SOLINK_TARGET)
1248-
1249-GETTEXT_LDFLAGS=
1250-OPENSSL_LDFLAGS=
1251-if test "$OPT_GETTEXT" != "no"; then
1252- start_check "gettext"
1253- GETTEXT_FOUND=no
1254- if cc_check_headers "libintl.h"; then
1255- if cc_check_statement "libintl.h" "gettext(\"\");"; then
1256- GETTEXT_FOUND=found
1257- elif cc_check_statement "libintl.h" "gettext(\"\");" "-lintl"; then
1258- GETTEXT_LDFLAGS="-lintl"
1259- GETTEXT_FOUND=found
1260- elif cc_check_statement "libintl.h" "gettext(\"\");" "-lintl -liconv"; then
1261- GETTEXT_LDFLAGS="-lintl -liconv"
1262- GETTEXT_FOUND=found
1263- fi
1264- fi
1265- if test "$GETTEXT_FOUND" = "found"; then
1266- RHASH_DEFINES=$(join_params $RHASH_DEFINES -DUSE_GETTEXT)
1267- RHASH_LOCALE_CFLAGS="-DLOCALEDIR=\\\"$INSTALL_LOCALEDIR\\\""
1268- fi
1269- finish_check $GETTEXT_FOUND
1270- test "$OPT_GETTEXT" = "yes" && test "$GETTEXT_FOUND" = "no" && die "gettext library not found"
1271-fi
1272-
1273-if test "$OPT_OPENSSL" != "no"; then
1274- start_check "OpenSSL"
1275- OPENSSL_FOUND=no
1276- if test "$ALLOW_RUNTIME_LINKING" = "no"; then
1277- echo "No runtime library loading, because dlopen() is not found!" >> "$TMPLOG"
1278- test "$OPT_OPENSSL" = "runtime" && die "dlopen() is required for OpenSSL runtime loading"
1279- fi
1280- OPENSSL_HEADERS="openssl/opensslconf.h openssl/md4.h openssl/md5.h openssl/sha.h"
1281- if cc_check_headers $OPENSSL_HEADERS; then
1282- if test "$OPT_OPENSSL" = "runtime" || ( test "$ALLOW_RUNTIME_LINKING" = "yes" && test "$OPT_OPENSSL" = "auto" ); then
1283- OPENSSL_FOUND=runtime
1284- LIBRHASH_DEFINES=$(join_params $LIBRHASH_DEFINES -DOPENSSL_RUNTIME)
1285- OPENSSL_LDFLAGS="$LIBDL_LDFLAGS"
1286- # note: libdl should disable -static
1287- test -n "$LIBDL_LDFLAGS" && LD_STATIC=
1288- elif win32 && cc_check_statement "openssl/md5.h" "MD5_Init(NULL);" "-leay32"; then
1289- OPENSSL_FOUND=found
1290- LIBRHASH_DEFINES=$(join_params $LIBRHASH_DEFINES -DUSE_OPENSSL)
1291- OPENSSL_LDFLAGS="-leay32"
1292- elif cc_check_statement "openssl/md5.h" "MD5_Init(NULL);" "-lcrypto"; then
1293- OPENSSL_FOUND=found
1294- LIBRHASH_DEFINES=$(join_params $LIBRHASH_DEFINES -DUSE_OPENSSL)
1295- OPENSSL_LDFLAGS="-lcrypto"
1296- fi
1297- fi
1298- finish_check $OPENSSL_FOUND
1299- test "$OPT_OPENSSL" != "auto" && test "$OPENSSL_FOUND" = "no" && die "OpenSSL library not found"
1300-fi
1301-
1302-# building of static/shared binary and library
1303-RHASH_BUILD_TARGETS="\$(RHASH_BINARY)"
1304-RHASH_LDFLAGS="\$(OPTLDFLAGS) \$(ADDLDFLAGS)"
1305-RHASH_TEST_OPTIONS=
1306-RHASH_EXTRA_INSTALL=
1307-LIBRHASH_BUILD_TARGETS=
1308-LIBRHASH_TEST_TARGETS=
1309-EXTRA_INSTALL_LIBSHARED=
1310-EXTRA_UNINSTALL_LIBSHARED=
1311-if test "$OPT_STATIC" = "no"; then
1312- LIBRHASH_TYPE=shared
1313- LIBRHASH_PATH="\$(LIBRHASH_SHARED)"
1314- RHASH_TEST_OPTIONS=--shared
1315- test "$INSTALL_LIB_SHARED" = "auto" && INSTALL_LIB_SHARED=yes
1316- test "$INSTALL_LIB_STATIC" = "yes" && RHASH_BUILD_TARGETS="$RHASH_BUILD_TARGETS \$(LIBRHASH_STATIC)"
1317- RHASH_LDFLAGS=$(join_params $RHASH_LDFLAGS $GETTEXT_LDFLAGS)
1318-else
1319- LIBRHASH_TYPE=static
1320- LIBRHASH_PATH="\$(LIBRHASH_STATIC)"
1321- test "$INSTALL_LIB_SHARED" = "yes" && RHASH_BUILD_TARGETS="$RHASH_BUILD_TARGETS \$(LIBRHASH_SHARED)"
1322- RHASH_LDFLAGS=$(join_params $RHASH_LDFLAGS $LD_STATIC $GETTEXT_LDFLAGS $OPENSSL_LDFLAGS)
1323-fi
1324-if test "$INSTALL_LIB_STATIC" = "yes"; then
1325- RHASH_EXTRA_INSTALL=$(join_params $RHASH_EXTRA_INSTALL install-lib-static)
1326- LIBRHASH_BUILD_TARGETS=$LIBRHASH_STATIC
1327- LIBRHASH_TEST_TARGETS=test-static
1328-fi
1329-if test "$NEED_IMPLIB" = "yes"; then
1330- EXTRA_INSTALL_LIBSHARED="install-implib"
1331- EXTRA_UNINSTALL_LIBSHARED="uninstall-implib"
1332-fi
1333-if test "$INSTALL_LIB_SHARED" = "yes"; then
1334- RHASH_EXTRA_INSTALL=$(join_params $RHASH_EXTRA_INSTALL install-lib-shared)
1335- LIBRHASH_BUILD_TARGETS=$(join_params $LIBRHASH_BUILD_TARGETS $LIBRHASH_SHARED)
1336- LIBRHASH_TEST_TARGETS=$(join_params $LIBRHASH_TEST_TARGETS test-shared)
1337-fi
1338-
1339-# check for an old POSIX make
1340-posix_make && Q_ASSIGN="=" || Q_ASSIGN="?="
1341-
1342-#####################################################################
1343-# write config.mak for the RHash makefile
1344-if test "$HAS_RHASH" = "yes"; then
1345- echo "Writing ${RHASH_SRC}config.mak"
1346- cat > ${RHASH_SRC}config.mak << EOF
1347-# -------- Generated by configure -----------
1348-
1349-DESTDIR $Q_ASSIGN
1350-BINDIR = \$(DESTDIR)$INSTALL_BINDIR
1351-SYSCONFDIR = \$(DESTDIR)$INSTALL_SYSCONFDIR
1352-MANDIR = \$(DESTDIR)$INSTALL_MANDIR
1353-PKGCONFIGDIR = \$(DESTDIR)$INSTALL_PKGCONFIGDIR
1354-LOCALEDIR = \$(DESTDIR)$INSTALL_LOCALEDIR
1355-
1356-AR = $CMD_AR
1357-CC = $CC
1358-INSTALL = $CMD_INSTALL
1359-
1360-LIBRHASH_STATIC = librhash/$LIBRHASH_STATIC
1361-LIBRHASH_SHARED = librhash/$LIBRHASH_SHARED
1362-LIBRHASH_TYPE = $LIBRHASH_TYPE
1363-LIBRHASH_PATH = $LIBRHASH_PATH
1364-VERSION = $RHASH_VERSION
1365-EXEC_EXT = $EXEC_EXT
1366-BUILD_TARGETS = $RHASH_BUILD_TARGETS
1367-TEST_OPTIONS = $RHASH_TEST_OPTIONS
1368-EXTRA_INSTALL = $RHASH_EXTRA_INSTALL
1369-SYMLINKS = $INSTALL_SYMLINKS
1370-LN_S = $LN_S
1371-
1372-OPTFLAGS = $OPTFLAGS
1373-OPTLDFLAGS = $WIN_LDFLAGS
1374-WARN_CFLAGS = $WARN_CFLAGS
1375-ADDCFLAGS = $BUILD_EXTRA_CFLAGS
1376-ADDLDFLAGS = $BUILD_EXTRA_LDFLAGS
1377-CONFCFLAGS = -DSYSCONFDIR=\\"$INSTALL_SYSCONFDIR\\"
1378-LOCALECFLAGS = $RHASH_LOCALE_CFLAGS
1379-CFLAGS = $RHASH_DEFINES \$(OPTFLAGS) \$(WARN_CFLAGS) \$(ADDCFLAGS)
1380-LDFLAGS = $RHASH_LDFLAGS
1381-
1382-EOF
1383-fi
1384-
1385-#####################################################################
1386-# write config.mak for the LibRHash makefile
1387-if test "$HAS_LIBRHASH" = "yes"; then
1388- echo "Writing ${LIBRHASH_SRC}config.mak"
1389- cat > ${LIBRHASH_SRC}config.mak << EOF
1390-# -------- Generated by configure -----------
1391-
1392-DESTDIR $Q_ASSIGN
1393-INCDIR = \$(DESTDIR)$INSTALL_INCDIR
1394-LIBDIR = \$(DESTDIR)$INSTALL_LIBDIR
1395-SO_DIR = \$(DESTDIR)$INSTALL_SO_DIR
1396-
1397-AR = $CMD_AR
1398-CC = $CC
1399-INSTALL = $CMD_INSTALL
1400-
1401-LIBRHASH_STATIC = $LIBRHASH_STATIC
1402-LIBRHASH_SHARED = $LIBRHASH_SHARED
1403-LIBRHASH_SO_MAJ = $LIBRHASH_SO_MAJ
1404-LIBRHASH_SOLINK = $LIBRHASH_SOLINK
1405-LIBRHASH_DEF = $LIBRHASH_DEF
1406-LIBRHASH_IMPLIB = $LIBRHASH_IMPLIB
1407-EXPORTS_FILE = $LIBRHASH_EXPORTS_FILE
1408-EXPORTS_SKIP = $LIBRHASH_EXPORTS_SKIP
1409-RM_FILES = $LIBRHASH_RM_FILES
1410-BUILD_TYPE = $LIBRHASH_TYPE
1411-EXEC_EXT = $EXEC_EXT
1412-
1413-EXPORTS_TARGET = $LIBRHASH_EXPORTS_TARGET
1414-BUILD_TARGETS = $LIBRHASH_BUILD_TARGETS
1415-TEST_TARGETS = $LIBRHASH_TEST_TARGETS
1416-SOLINK_TARGET = $LIBRHASH_SOLINK_TARGET
1417-SHARED_LIB_MODE = $SHARED_LIB_MODE
1418-EXTRA_INSTALL_LIBSHARED = $EXTRA_INSTALL_LIBSHARED
1419-EXTRA_UNINSTALL_LIBSHARED = $EXTRA_UNINSTALL_LIBSHARED
1420-
1421-OPTFLAGS = $LIBRHASH_OPTFLAGS
1422-OPTLDFLAGS = $WIN_LDFLAGS
1423-WARN_CFLAGS = $WARN_CFLAGS
1424-ADDCFLAGS = $BUILD_EXTRA_CFLAGS
1425-ADDLDFLAGS = $BUILD_EXTRA_LDFLAGS
1426-CFLAGS = $LIBRHASH_DEFINES \$(OPTFLAGS) \$(WARN_CFLAGS) \$(ADDCFLAGS)
1427-LDFLAGS = \$(OPTLDFLAGS) \$(ADDLDFLAGS)
1428-SHARED_CFLAGS = \$(CFLAGS) $LIBRHASH_SH_CFLAGS
1429-SHARED_LDFLAGS = \$(LDFLAGS) $(join_params $OPENSSL_LDFLAGS $LIBRHASH_SH_LDFLAGS)
1430-VERSION_CFLAGS = -DRHASH_XVERSION=$RHASH_XVERSION
1431-BIN_STATIC_LDFLAGS = \$(LDFLAGS) $(join_params $LD_STATIC $OPENSSL_LDFLAGS)
1432-
1433-EOF
1434-fi
1435-
1436-#####################################################################
1437-# write the pkg-config file for the librhash library
1438-if test -n "$LIBRHASH_PC"; then
1439- PC_EXC="$INSTALL_EXEC_PREFIX"
1440- PC_INC="$INSTALL_INCDIR"
1441- PC_LIB="$INSTALL_LIBDIR"
1442- test "$PC_EXC" = "${INSTALL_PREFIX}" && PC_EXC='${prefix}'
1443- test "$PC_INC" = "${INSTALL_PREFIX}/include" && PC_INC='${prefix}/include'
1444- test "$PC_LIB" = "${INSTALL_EXEC_PREFIX}/lib" && PC_LIB='${exec_prefix}/lib'
1445- echo "Writing ${LIBRHASH_PC}"
1446- cat > $LIBRHASH_PC << EOF
1447-prefix=${INSTALL_PREFIX}
1448-exec_prefix=${PC_EXC}
1449-libdir=${PC_LIB}
1450-includedir=${PC_INC}
1451-
1452-Name: librash
1453-Description: LibRHash shared library
1454-Version: ${RHASH_VERSION}
1455-Cflags: -I\${includedir}
1456-Libs: -L\${libdir} -lrhash
1457-Libs.private: ${OPENSSL_LDFLAGS}
1458-
1459-EOF
1460-fi
1461-
1462-#####################################################################
1463-# write man page
1464-MAN_PATH=${RHASH_SRC}dist/rhash.1
1465-if test -f "${MAN_PATH}.in"; then
1466- SED_SYSCONFDIR=$(echo $INSTALL_SYSCONFDIR | sed -e 's/\([|\\&]\)/\\\1/g')
1467- echo "Writing ${MAN_PATH}"
1468- sed -e "s|@SYSCONFDIR@|$SED_SYSCONFDIR|" ${MAN_PATH}.in > ${MAN_PATH}
1469-fi
1470\ No newline at end of file
1471diff --git a/librhash/CMakeLists.txt b/librhash/CMakeLists.txt
1472new file mode 100644
1473index 0000000..6b32373
1474--- /dev/null
1475+++ b/librhash/CMakeLists.txt
1476@@ -0,0 +1,74 @@
1477+option(USE_OPENSSL "Use OpenSSL for optimized hash algorithms" OFF)
1478+option(OPENSSL_RUNTIME "Load OpenSSL at run-time, if available" OFF)
1479+
1480+# RHASH_XVERSION packs the version as 0xMMmmpp00, queried via rhash_get_*_version()
1481+math(EXPR RHASH_XVERSION
1482+ "(${RHASH_VERSION_MAJOR} << 24) | (${RHASH_VERSION_MINOR} << 16) | (${RHASH_VERSION_PATCH} << 8)")
1483+
1484+add_library(librhash
1485+ algorithms.c
1486+ byte_order.c
1487+ plug_openssl.c
1488+ rhash.c
1489+ rhash_torrent.c
1490+ aich.c
1491+ blake2b.c
1492+ blake2s.c
1493+ blake3.c
1494+ crc32.c
1495+ ed2k.c
1496+ edonr.c
1497+ gost12.c
1498+ gost94.c
1499+ has160.c
1500+ hex.c
1501+ md4.c
1502+ md5.c
1503+ ripemd-160.c
1504+ sha1.c
1505+ sha_ni.c
1506+ sha256.c
1507+ sha512.c
1508+ sha3.c
1509+ snefru.c
1510+ tiger.c
1511+ tiger_sbox.c
1512+ torrent.c
1513+ tth.c
1514+ util.c
1515+ whirlpool.c
1516+ whirlpool_sbox.c)
1517+
1518+set_target_properties(librhash PROPERTIES
1519+ OUTPUT_NAME rhash
1520+ VERSION ${RHASH_VERSION}
1521+ SOVERSION ${RHASH_VERSION_MAJOR})
1522+target_compile_definitions(librhash PRIVATE RHASH_XVERSION=${RHASH_XVERSION})
1523+target_include_directories(librhash INTERFACE
1524+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
1525+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
1526+
1527+if(USE_OPENSSL)
1528+ find_package(OpenSSL REQUIRED)
1529+ target_link_libraries(librhash PUBLIC OpenSSL::Crypto)
1530+ target_compile_definitions(librhash PUBLIC USE_OPENSSL)
1531+endif()
1532+
1533+if(OPENSSL_RUNTIME)
1534+ target_link_libraries(librhash PRIVATE ${CMAKE_DL_LIBS})
1535+ target_compile_definitions(librhash PRIVATE OPENSSL_RUNTIME)
1536+endif()
1537+
1538+install(TARGETS librhash
1539+ EXPORT rhashConfig
1540+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
1541+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
1542+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
1543+install(FILES rhash.h rhash_torrent.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
1544+install(EXPORT rhashConfig
1545+ NAMESPACE rhash::
1546+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/rhash)
1547+
1548+configure_file(librhash.pc.in librhash.pc @ONLY)
1549+install(FILES "${CMAKE_CURRENT_BINARY_DIR}/librhash.pc"
1550+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
1551diff --git a/librhash/Makefile b/librhash/Makefile
1552deleted file mode 100644
1553index 8fb5213..0000000
1554--- a/librhash/Makefile
1555+++ /dev/null
1556@@ -1,229 +0,0 @@
1557-# Makefile for LibRHash
1558-
1559-include config.mak
1560-
1561-HEADERS = algorithms.h byte_order.h plug_openssl.h rhash.h rhash_torrent.h aich.h blake2b.h blake2s.h blake3.h crc32.h ed2k.h edonr.h hex.h md4.h md5.h sha1.h sha_ni.h sha256.h sha512.h sha3.h ripemd-160.h gost12.h gost94.h has160.h snefru.h tiger.h tth.h torrent.h ustd.h util.h whirlpool.h
1562-SOURCES = algorithms.c byte_order.c plug_openssl.c rhash.c rhash_torrent.c aich.c blake2b.c blake2s.c blake3.c crc32.c ed2k.c edonr.c hex.c md4.c md5.c sha1.c sha_ni.c sha256.c sha512.c sha3.c ripemd-160.c gost12.c gost94.c has160.c snefru.c tiger.c tiger_sbox.c tth.c torrent.c util.c whirlpool.c whirlpool_sbox.c
1563-OBJECTS = $(SOURCES:.c=.o)
1564-LIB_HEADERS = rhash.h rhash_torrent.h
1565-TEST_STATIC = test_static$(EXEC_EXT)
1566-TEST_SHARED = test_shared$(EXEC_EXT)
1567-INSTALL_DATA = $(INSTALL) -m 644
1568-INSTALL_SHARED = $(INSTALL) -m $(SHARED_LIB_MODE)
1569-
1570-all: $(BUILD_TARGETS)
1571-lib-static: $(LIBRHASH_STATIC)
1572-lib-shared: $(LIBRHASH_SHARED)
1573-libs-all: lib-static lib-shared
1574-uninstall-lib: uninstall-lib-shared uninstall-lib-static uninstall-so-link
1575-
1576-config.mak:
1577- echo "Run the ./configure script first" && false
1578-
1579-install-lib-static: $(LIBRHASH_STATIC)
1580- $(INSTALL) -d $(LIBDIR)
1581- $(INSTALL_DATA) $(LIBRHASH_STATIC) $(LIBDIR)/
1582-
1583-install-lib-shared: $(LIBRHASH_SHARED) $(EXTRA_INSTALL_LIBSHARED)
1584- $(INSTALL) -d $(SO_DIR)
1585- $(INSTALL_SHARED) $(LIBRHASH_SHARED) $(SO_DIR)/
1586- test "x$(LIBRHASH_SO_MAJ)" = "x$(LIBRHASH_SHARED)" || ( \
1587- rm -f $(LIBDIR)/$(LIBRHASH_SO_MAJ) && \
1588- ln -s $(LIBRHASH_SHARED) $(LIBDIR)/$(LIBRHASH_SO_MAJ) )
1589-
1590-install-implib:
1591- $(INSTALL) -d $(LIBDIR)
1592- $(INSTALL_DATA) $(LIBRHASH_IMPLIB) $(LIBDIR)/
1593-
1594-install-so-link:
1595- $(INSTALL) -d $(LIBDIR)
1596- rm -f $(LIBDIR)/$(LIBRHASH_SOLINK)
1597- ln -s $(LIBRHASH_SO_MAJ) $(LIBDIR)/$(LIBRHASH_SOLINK)
1598-
1599-uninstall-lib-static: uninstall-lib-headers
1600- rm -f $(LIBDIR)/$(LIBRHASH_STATIC)
1601-
1602-uninstall-lib-shared: $(EXTRA_UNINSTALL_LIBSHARED)
1603- rm -f $(SO_DIR)/$(LIBRHASH_SHARED) $(SO_DIR)/$(LIBRHASH_SO_MAJ)
1604-
1605-uninstall-implib:
1606- rm -f $(LIBDIR)/$(LIBRHASH_IMPLIB)
1607-
1608-uninstall-so-link:
1609- rm -f $(LIBDIR)/$(LIBRHASH_SOLINK)
1610-
1611-install-lib-headers:
1612- $(INSTALL) -d $(INCDIR)
1613- $(INSTALL_DATA) $(LIB_HEADERS) $(INCDIR)/
1614-
1615-uninstall-lib-headers:
1616- for f in $(LIB_HEADERS); do rm -f "$(INCDIR)/$$f"; done
1617-
1618-# not using GNU make extensions for compatibility with Unix/*BSD make
1619-#%.o: %.c
1620-# $(CC) -c $(CFLAGS) $< -o $@
1621-
1622-# NOTE: dependences were generated by 'gcc -MM -DUSE_OPENSSL *.c'
1623-# we are using plain old makefile style to support BSD make
1624-aich.o: aich.c aich.h algorithms.h rhash.h byte_order.h ustd.h sha1.h \
1625- util.h
1626- $(CC) -c $(CFLAGS) $< -o $@
1627-
1628-algorithms.o: algorithms.c algorithms.h rhash.h byte_order.h ustd.h \
1629- util.h aich.h sha1.h blake2b.h blake2s.h blake3.h crc32.h ed2k.h md4.h \
1630- edonr.h gost12.h gost94.h has160.h md5.h ripemd-160.h snefru.h sha_ni.h \
1631- sha256.h sha512.h sha3.h tiger.h torrent.h tth.h whirlpool.h \
1632- plug_openssl.h
1633- $(CC) -c $(CFLAGS) $< -o $@
1634-
1635-blake2b.o: blake2b.c blake2b.h ustd.h byte_order.h
1636- $(CC) -c $(CFLAGS) $< -o $@
1637-
1638-blake2s.o: blake2s.c blake2s.h ustd.h byte_order.h
1639- $(CC) -c $(CFLAGS) $< -o $@
1640-
1641-blake3.o: blake3.c blake3.h ustd.h byte_order.h
1642- $(CC) -c $(CFLAGS) $< -o $@
1643-
1644-byte_order.o: byte_order.c byte_order.h ustd.h
1645- $(CC) -c $(CFLAGS) $< -o $@
1646-
1647-crc32.o: crc32.c byte_order.h ustd.h crc32.h
1648- $(CC) -c $(CFLAGS) $< -o $@
1649-
1650-ed2k.o: ed2k.c ed2k.h md4.h ustd.h
1651- $(CC) -c $(CFLAGS) $< -o $@
1652-
1653-edonr.o: edonr.c byte_order.h ustd.h edonr.h
1654- $(CC) -c $(CFLAGS) $< -o $@
1655-
1656-gost12.o: gost12.c gost12.h ustd.h byte_order.h
1657- $(CC) -c $(CFLAGS) $< -o $@
1658-
1659-gost94.o: gost94.c gost94.h ustd.h byte_order.h
1660- $(CC) -c $(CFLAGS) $< -o $@
1661-
1662-has160.o: has160.c byte_order.h ustd.h has160.h
1663- $(CC) -c $(CFLAGS) $< -o $@
1664-
1665-hex.o: hex.c hex.h ustd.h util.h
1666- $(CC) -c $(CFLAGS) $< -o $@
1667-
1668-md4.o: md4.c byte_order.h ustd.h md4.h
1669- $(CC) -c $(CFLAGS) $< -o $@
1670-
1671-md5.o: md5.c byte_order.h ustd.h md5.h
1672- $(CC) -c $(CFLAGS) $< -o $@
1673-
1674-plug_openssl.o: plug_openssl.c util.h plug_openssl.h algorithms.h rhash.h \
1675- byte_order.h ustd.h
1676- $(CC) -c $(CFLAGS) $< -o $@
1677-
1678-rhash.o: rhash.c rhash.h algorithms.h byte_order.h ustd.h hex.h \
1679- plug_openssl.h torrent.h sha1.h util.h
1680- $(CC) -c $(CFLAGS) $(VERSION_CFLAGS) $< -o $@
1681-
1682-rhash_torrent.o: rhash_torrent.c rhash_torrent.h algorithms.h rhash.h \
1683- byte_order.h ustd.h torrent.h sha1.h
1684- $(CC) -c $(CFLAGS) $< -o $@
1685-
1686-ripemd-160.o: ripemd-160.c byte_order.h ustd.h ripemd-160.h
1687- $(CC) -c $(CFLAGS) $< -o $@
1688-
1689-sha1.o: sha1.c byte_order.h ustd.h sha1.h
1690- $(CC) -c $(CFLAGS) $< -o $@
1691-
1692-sha_ni.o: sha_ni.c sha_ni.h sha1.h ustd.h sha256.h byte_order.h
1693- $(CC) -c $(CFLAGS) $< -o $@
1694-
1695-sha256.o: sha256.c byte_order.h ustd.h sha256.h
1696- $(CC) -c $(CFLAGS) $< -o $@
1697-
1698-sha3.o: sha3.c byte_order.h ustd.h sha3.h
1699- $(CC) -c $(CFLAGS) $< -o $@
1700-
1701-sha512.o: sha512.c byte_order.h ustd.h sha512.h
1702- $(CC) -c $(CFLAGS) $< -o $@
1703-
1704-snefru.o: snefru.c byte_order.h ustd.h snefru.h
1705- $(CC) -c $(CFLAGS) $< -o $@
1706-
1707-test_lib.o: test_lib.c byte_order.h ustd.h rhash_torrent.h test_utils.h \
1708- rhash.h test_lib.h util.h
1709- $(CC) -c $(CFLAGS) $< -o $@
1710-
1711-test_utils.o: test_utils.c test_utils.h byte_order.h ustd.h rhash.h
1712- $(CC) -c $(CFLAGS) $< -o $@
1713-
1714-tiger.o: tiger.c byte_order.h ustd.h tiger.h
1715- $(CC) -c $(CFLAGS) $< -o $@
1716-
1717-tiger_sbox.o: tiger_sbox.c byte_order.h ustd.h
1718- $(CC) -c $(CFLAGS) $< -o $@
1719-
1720-torrent.o: torrent.c torrent.h algorithms.h rhash.h byte_order.h ustd.h \
1721- sha1.h hex.h util.h
1722- $(CC) -c $(CFLAGS) $< -o $@
1723-
1724-tth.o: tth.c tth.h ustd.h tiger.h byte_order.h
1725- $(CC) -c $(CFLAGS) $< -o $@
1726-
1727-util.o: util.c util.h
1728- $(CC) -c $(CFLAGS) $< -o $@
1729-
1730-whirlpool.o: whirlpool.c byte_order.h ustd.h whirlpool.h
1731- $(CC) -c $(CFLAGS) $< -o $@
1732-
1733-whirlpool_sbox.o: whirlpool_sbox.c byte_order.h ustd.h
1734- $(CC) -c $(CFLAGS) $< -o $@
1735-
1736-# build shared library
1737-$(EXPORTS_FILE): $(LIB_HEADERS)
1738- sed -ne '1s/.*/{ global:/p; s/^RHASH_API.* \(rhash_[a-z0-9_]*\)(.*/ \1;/p; $$s/.*/local: *; };/p' \
1739- $(LIB_HEADERS) | grep -v "$(EXPORTS_SKIP)" > $@
1740-
1741-$(LIBRHASH_SOLINK):
1742- test "x$(LIBRHASH_SO_MAJ)" = "x$(LIBRHASH_SHARED)" || ( \
1743- rm -f $(LIBRHASH_SO_MAJ) && \
1744- ln -s $(LIBRHASH_SHARED) $(LIBRHASH_SO_MAJ) )
1745- rm -f $(LIBRHASH_SOLINK)
1746- ln -s $(LIBRHASH_SO_MAJ) $(LIBRHASH_SOLINK)
1747-
1748-$(LIBRHASH_SHARED): $(SOURCES) $(EXPORTS_TARGET) $(SOLINK_TARGET)
1749- $(CC) $(SHARED_CFLAGS) $(VERSION_CFLAGS) $(SOURCES) $(SHARED_LDFLAGS) -o $@
1750-
1751-# build static library
1752-$(LIBRHASH_STATIC): $(OBJECTS)
1753- rm -f $@
1754- $(AR) -cqs $@ $(OBJECTS)
1755-
1756-# test targets
1757-$(TEST_SHARED): $(LIBRHASH_SHARED) test_lib.o test_utils.o
1758- $(CC) $(CFLAGS) test_lib.o test_utils.o $(LIBRHASH_SHARED) $(LDFLAGS) -o $@
1759-
1760-$(TEST_STATIC): $(LIBRHASH_STATIC) test_lib.o test_utils.o
1761- $(CC) $(CFLAGS) test_lib.o test_utils.o $(LIBRHASH_STATIC) $(BIN_STATIC_LDFLAGS) -o $@
1762-
1763-test: $(TEST_TARGETS)
1764-test-static: $(TEST_STATIC)
1765- ./$(TEST_STATIC)
1766-test-shared: $(TEST_SHARED)
1767- LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) DYLD_LIBRARY_PATH=.:$(DYLD_LIBRARY_PATH) ./$(TEST_SHARED)
1768-
1769-print-info: print-info-$(BUILD_TYPE)
1770-print-info-static: $(TEST_STATIC)
1771- ./$(TEST_STATIC) --info
1772-print-info-shared: $(TEST_SHARED)
1773- LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) DYLD_LIBRARY_PATH=.:$(DYLD_LIBRARY_PATH) ./$(TEST_SHARED) --info
1774-
1775-distclean: clean
1776- rm -f config.mak
1777-
1778-clean:
1779- rm -f *.o $(LIBRHASH_STATIC) $(LIBRHASH_SHARED) $(TEST_STATIC) $(TEST_SHARED) $(RM_FILES)
1780-
1781-.PHONY: all clean distclean install-lib-headers install-lib-shared install-lib-static \
1782- install-so-link libs-all lib-shared lib-static test test-shared test-static \
1783- print-info print-info-static print-info-shared uninstall-lib-headers \
1784- uninstall-lib uninstall-lib-shared uninstall-lib-static uninstall-so-link \
1785- install-implib uninstall-implib
1786diff --git a/librhash/librhash.pc.in b/librhash/librhash.pc.in
1787new file mode 100644
1788index 0000000..bedf9d1
1789--- /dev/null
1790+++ b/librhash/librhash.pc.in
1791@@ -0,0 +1,10 @@
1792+prefix=@CMAKE_INSTALL_PREFIX@
1793+exec_prefix=${prefix}
1794+libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
1795+includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
1796+
1797+Name: librhash
1798+Description: A library for computing message digests and magnet links
1799+Version: @RHASH_VERSION@
1800+Cflags: -I${includedir}
1801+Libs: -L${libdir} -lrhash