[Buildroot] [PATCH 1/2] librhash: new package
Vicente Olivert Riera
Vincent.Riera at imgtec.com
Wed Apr 19 11:03:43 UTC 2017
Hi Arnout,
thanks for the review. Comments below:
On 18/04/17 18:21, Arnout Vandecappelle wrote:
> Hi Vicente,
>
> What a horrible package this is :-)
>
> On 18-04-17 17:48, Vicente Olivert Riera wrote:
> [snip]
>> diff --git a/package/librhash/Config.in b/package/librhash/Config.in
>> new file mode 100644
>> index 0000000..c3b552d
>> --- /dev/null
>> +++ b/package/librhash/Config.in
>> @@ -0,0 +1,23 @@
>> +config BR2_PACKAGE_LIBRHASH
>> + bool "librhash"
>> + select BR2_PACKAGE_GETTEXT if BR2_NEEDS_GETTEXT_IF_LOCALE
>> + help
>> + RHash is a console utility for calculation and verification of magnet
>
> Since librhash is the library, not the binary, I think you should take the help
> text of the library:
>
> LibRHash is a professional, portable, thread-safe C library for
> computing a wide variety of hash sums, such as CRC32, MD4, MD5,
> SHA1, SHA256, SHA512, SHA3, AICH, ED2K, Tiger, DC++ TTH, BitTorrent
> BTIH, GOST R 34.11-94, RIPEMD-160, HAS-160, EDON-R, Whirlpool and
> Snefru.
>
OK.
>> + links and a wide range of hash sums like CRC32, MD4, MD5, SHA1,
>> + SHA256, SHA512, SHA3, AICH, ED2K, Tiger, DC++ TTH, BitTorrent BTIH,
>> + GOST R 34.11-94, RIPEMD-160, HAS-160, EDON-R, Whirlpool and Snefru.
>> +
>> + https://github.com/rhash/RHash
>> +
>> +if BR2_PACKAGE_LIBRHASH
>> +
>> +config BR2_PACKAGE_RHASH
>
> Sub-config options should always start with the package name, so e.g.
> BR2_PACKAGE_LIBRHASH_PROGRAM (or _BINARY, or _TOOLS, or ...).
OK.
>> + bool "rhash binary"
>> + depends on !BR2_STATIC_LIBS
>
> I had a quick look at the Makefile, and it *looks* like the program can also be
> built statically (with the "all" target). If this doesn't work for some reason,
> please explain either in the commit log or in a comment.
It doesn't work. Even if you build it with the "all" target the console
utility is built dynamically. Look:
$ grep '_LIBS=y' .config
BR2_STATIC_LIBS=y
$ file output/build/rhash-1.3.4/rhash
output/build/rhash-1.3.4/rhash: ELF 64-bit LSB executable, x86-64,
version 1 (SYSV), dynamically linked, interpreter /lib/ld64-uClibc.so.0,
not stripped
And it doesn't work:
$ sudo chroot output/target/ /bin/sh
$ /usr/bin/rhash
/bin/sh: /usr/bin/rhash: not found
Doing a dynamic Buildroot build (BR2_SHARED_LIBS=y) and doing the same
test (chroot + execution) it works just fine.
>> + help
>> + Install rhash binary as well
>> +
>> +comment "rhash binary needs a toolchain w/ dynamic library"
>> + depends on BR2_STATIC_LIBS
>> +
>> +endif
>> diff --git a/package/librhash/librhash.hash b/package/librhash/librhash.hash
>> new file mode 100644
>> index 0000000..5efc3a6
>> --- /dev/null
>> +++ b/package/librhash/librhash.hash
>> @@ -0,0 +1,3 @@
>> +# From https://sourceforge.net/projects/rhash/files/rhash/1.3.4/
>> +md5 0b51010604659e9e99f6307b053ba13b rhash-1.3.4-src.tar.gz
>> +sha1 411d8c7ba84fa9763bc49fa2fd3a7587712fd52c rhash-1.3.4-src.tar.gz
>> diff --git a/package/librhash/librhash.mk b/package/librhash/librhash.mk
>> new file mode 100644
>> index 0000000..79806c9
>> --- /dev/null
>> +++ b/package/librhash/librhash.mk
>> @@ -0,0 +1,64 @@
>> +################################################################################
>> +#
>> +# librhash
>> +#
>> +################################################################################
>> +
>> +LIBRHASH_VERSION = 1.3.4
>> +LIBRHASH_SOURCE = rhash-$(LIBRHASH_VERSION)-src.tar.gz
>
> Since upstream calls it rhash, the package should also be called rhash. True,
> it's a bit ambiguous since upstream calls the library librhash and we primarily
> target the library. But you can also compare it to openssl, which bundles both
> the library and the tool and upstream calls it just openssl.
OK.
>
>> +LIBRHASH_SITE = https://sourceforge.net/projects/rhash/files/rhash/$(LIBRHASH_VERSION)
>> +LIBRHASH_LICENSE = MIT
>> +LIBRHASH_LICENSE_FILES = COPYING
>> +LIBRHASH_INSTALL_STAGING = YES
>> +
>> +ifeq ($(BR2_NEEDS_GETTEXT_IF_LOCALE),y)
>> +LIBRHASH_DEPENDENCIES += gettext
>> +LIBRHASH_ADDCFLAGS += -DUSE_GETTEXT
>> +LIBRHASH_ADDLDFLAGS += -lintl
>> +endif
>> +
>> +ifeq ($(BR2_PACKAGE_OPENSSL)x$(BR2_STATIC_LIBS),yx)
>> +LIBRHASH_DEPENDENCIES += openssl
>> +LIBRHASH_ADDCFLAGS += -DOPENSSL_RUNTIME -rdynamic
>> +LIBRHASH_ADDLDFLAGS += -ldl
>
> Does the static lib work correctly in the SHARED_STATIC case? Well, you
> probably need to pass explicit options when linking against librhash but that's
> up to the user then.
I haven't tried it. Should I remove the SHARED_STATIC case?
> [Note: if you have indeed tried this, it is very useful to mention this
> explicitly in the commit message.]
>
> Oh, is this part even relevant for the library only? Or is it only for building
> the program?
Lib only.
>> +endif
>> +
>> +ifeq ($(BR2_SHARED_STATIC_LIBS),y)
>> +LIBRHASH_BUILD_TARGETS = lib-static lib-shared build-shared
>> +LIBRHASH_INSTALL_TARGETS = install-lib-static install-lib-shared install-so-link
>> +else ifeq ($(BR2_SHARED_LIBS),y)
>> +LIBRHASH_BUILD_TARGETS = lib-shared build-shared
>> +LIBRHASH_INSTALL_TARGETS = install-lib-shared install-so-link
>> +else
>> +LIBRHASH_BUILD_TARGETS = lib-static
>> +LIBRHASH_INSTALL_TARGETS = install-lib-static
>
> I have a slight preference for structuring it as
>
> if SHARED
> else if STATIC
> else
>
> for the simple reason that you're more likely to grep for either BR2_SHARED_LIBS
> or BR2_STATIC_LIBS, not so much for BR2_SHARED_STATIC_LIBS.
OK.
>
>> +endif
>> +
>> +define LIBRHASH_BUILD_CMDS
>> + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \
>> + ADDCFLAGS="$(LIBRHASH_ADDCFLAGS)" ADDLDFLAGS="$(LIBRHASH_ADDLDFLAGS)" \
>
> I have a slight preference for setting this part in LIBRHASH_MAKE_OPTS and
> passing those both in the build and in the install commands. And I would also
> pass the PREFIX part already in the build commands, just in case it ever gets
> used to construct a path to something.
OK.
>
>> + $(LIBRHASH_BUILD_TARGETS)
>> +endef
>> +
>> +define LIBRHASH_INSTALL_STAGING_CMDS
>> + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D)/librhash \
>> + DESTDIR="$(STAGING_DIR)" PREFIX="/usr" \
>> + $(LIBRHASH_INSTALL_TARGETS) install-headers
>
> From a quick look at the Makefile, it looked like those install targets also
> work from the top-level (they just do an additional make -C). That would
> simplify things a lot because you can just add 'install-shared' to install the
> program, instead of needing a post-install hook.
Not all the install targets work from top level. For instance, two
critical install targets (install-so-link and install-headers) don't
work. That why I install the library and headers in one step, and the
console utility in another step (using the hook).
> And of course it doesn't matter
> if you install the program in staging as well - in fact I prefer it, ideally
> staging is a superset of target.
OK.
Regards,
Vincent
>
>
> Regards,
> Arnout
>
>
>> +endef
>> +
>> +define LIBRHASH_INSTALL_TARGET_CMDS
>> + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D)/librhash \
>> + DESTDIR="$(TARGET_DIR)" PREFIX="/usr" \
>> + $(LIBRHASH_INSTALL_TARGETS)
>> +endef
>> +
>> +ifeq ($(BR2_PACKAGE_RHASH),y)
>> +define LIBRHASH_INSTALL_RHASH_BINARY
>> + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \
>> + DESTDIR="$(TARGET_DIR)" PREFIX="/usr" \
>> + install-shared
>> +endef
>> +LIBRHASH_POST_INSTALL_TARGET_HOOKS += LIBRHASH_INSTALL_RHASH_BINARY
>> +endif
>> +
>> +$(eval $(generic-package))
>>
>
More information about the buildroot
mailing list