Patchwork [v2] DCMTK: new package

login
register
mail settings
Submitter William Frost
Date April 28, 2014, 11:58 p.m.
Message ID <535EEB16.4090906@gmail.com>
Download mbox | patch
Permalink /patch/343628/
State Superseded
Headers show

Comments

William Frost - April 28, 2014, 11:58 p.m.
It works fine but still every time I type "make all" in Buildroot dcmtk 
make the configure process again. Any idea on how to solve this?

Signed-off-by: William Frost <tsmrnd0@gmail.com>
---
Changes v1 -> v2:
   - fixed DCMTK_LICENSE to BDS
   - changed --host=$(arm-none-linux-gnueabi) to --host=$(GNU_TARGET_NAME)
   - fixed PKG_CONFIG_PATH and PKG_CONFIG_SYSROOT_DIR

  (suggested by Thomas De Schampheleire):
    - fixed all lines to less than 80 characters in Config.in ans dcmtk.mk
    - changed BR2_DCMTK_VERSION to  BR2_PACKAGE_DCMTK_VERSION
    - removed DCMTK_SOURCE
---
  package/Config.in       |  1 +
  package/dcmtk/Config.in | 38 ++++++++++++++++++++++
  package/dcmtk/dcmtk.mk  | 85 
+++++++++++++++++++++++++++++++++++++++++++++++++
  3 files changed, 124 insertions(+)
  create mode 100644 package/dcmtk/Config.in
  create mode 100644 package/dcmtk/dcmtk.mk

+$(eval $(autotools-package))
Thomas Petazzoni - April 29, 2014, 5:34 a.m.
Dear William Frost,

On Tue, 29 Apr 2014 08:58:14 +0900, William Frost wrote:
> It works fine but still every time I type "make all" in Buildroot dcmtk 
> make the configure process again. Any idea on how to solve this?

This message shouldn't be part of the commit log. If you want to give
such "side" messages, do it below the "---" sign with the changelog, or
in a separate cover letter.

The title of the patch should have DCMTK in lower case, for consistency
with what we do for other packages.

Also, you're still using Thunderbird to post your patches, and they are
badly line-wrapped. It might also be the reason why the Config.in file
indentation is wrong, so I won't comment on this for now, waiting for
you to resend a new version with git send-email.


> +if BR2_PACKAGE_DCMTK
> +
> +choice
> +    prompt "DCMTK Version"
> +    default BR2_PACKAGE_DCMTK_VERSION_3_6_0
> +    help
> +      Select the version of DCMTK you wish to use.
> +
> +    config BR2_PACKAGE_DCMTK_VERSION_3_6_0
> +        bool "DCMTK 3.6.0"
> +
> +    config BR2_PACKAGE_DCMTK_VERSION_SNAPSHOT_2012
> +        bool "DCMTK 3.6.1 snapshot (2012.11.02)"
> +
> +    config BR2_PACKAGE_DCMTK_VERSION_SNAPSHOT_2013
> +        bool "DCMTK 3.6.1 snapshot (2013.11.14)"
> +
> +endchoice
> +
> +config BR2_PACKAGE_DCMTK_VERSION
> +    string
> +    default "3.6.0"    if BR2_PACKAGE_DCMTK_VERSION_3_6_0
> +    default "3.6.1_20121102" if BR2_PACKAGE_DCMTK_VERSION_SNAPSHOT_2012
> +    default "3.6.1_20131114" if BR2_PACKAGE_DCMTK_VERSION_SNAPSHOT_2013

Do we really need to make the version configurable? There are *very*
few packages for which we support that, and we generally try to avoid
this as much as possible.

> diff --git a/package/dcmtk/dcmtk.mk b/package/dcmtk/dcmtk.mk
> new file mode 100644
> index 0000000..5c9a851
> --- /dev/null
> +++ b/package/dcmtk/dcmtk.mk
> @@ -0,0 +1,85 @@
> +################################################################################
> +#
> +# dcmtk
> +#
> +################################################################################
> +DCMTK_VERSION = $(call qstrip,$(BR2_PACKAGE_DCMTK_VERSION))

One empty new line between the comment header and the first variable
definition.

> +
> +ifeq ($(BR2_PACKAGE_DCMTK_VERSION), "3.6.0")
> +DCMTK_SITE = http://dicom.offis.de/download/dcmtk/dcmtk360/
> +endif
> +ifeq ($(BR2_PACKAGE_DCMTK_VERSION),"3.6.1_20121102")
> +DCMTK_SITE = http://dicom.offis.de/download/dcmtk/snapshot/old
> +endif
> +ifeq ($(BR2_PACKAGE_DCMTK_VERSION),"3.6.1_20131114")
> +DCMTK_SITE = http://dicom.offis.de/download/dcmtk/snapshot
> +endif
> +
> +DCMTK_LICENSE = BSD

The license looks more complex than that. Maybe you want to seek the
input of Luca and/or Yann on this.

> +DCMTK_LICENSE_FILES = COPYING

There is no file named 'COPYING' in the source code, so this cannot
work. Maybe you want to use the 'COPYRIGHT' file instead.

> +DCMTK_INSTALL_STAGING = YES
> +
> +DCMTK_CFLAGS = $(TARGET_CFLAGS) --sysroot=$(STAGING_DIR) -O -D_REENTRANT \
> +        -D_XOPEN_SOURCE_EXTENDED -D_XOPEN_SOURCE=500 -D_BSD_SOURCE \
> +        -D_BSD_COMPAT -D_OSF_SOURCE -D_POSIX_C_SOURCE=199506L -Wall \
> +        -Wno-psabi

This looks suspicious. First, the --sysroot option is for sure not
needed. And all the other -D options look weird. Why are they needed?

> +DCMTK_CXXFLAGS = $(TARGET_CFLAGS) --sysroot=$(STAGING_DIR) -O 

So you start of TARGET_CFLAGS to define CXXFLAGS ?

> -D_REENTRANT \
> +        -D_XOPEN_SOURCE_EXTENDED -D_XOPEN_SOURCE=500 -D_BSD_SOURCE \
> +        -D_BSD_COMPAT -D_OSF_SOURCE -D_POSIX_C_SOURCE=199506L -Wall \
> +        -Wno-psabi
> +
> +DCMTK_CPPFLAGS = $(TARGET_CFLAGS) --sysroot=$(STAGING_DIR)
> +DCMTK_LDFLAGS = $(TARGET_CFLAGS) --sysroot=$(STAGING_DIR)

Not needed, and actually wrong: you use TARGET_CFLAGS to derive your
CPPFLAGS and LDFLAGS.

> +DCMTK_INSTALL_STAGING_OPT = DESTDIR=$(STAGING_DIR) STRIP=$(TARGET_STRIP) \
> +                install
> +
> +DCMTK_INSTALL_TARGET_OPT = DESTDIR=$(TARGET_DIR) STRIP=$(TARGET_STRIP) 
> install

This is probably not needed.

> +
> +DCMTK_CONF_OPT = --without-libtiff --without-openssl --without-libxml \
> +          --without-libpng --without-libsndfile --disable-debug \
> +          --without-private-tags --enable-std-includes --disable-rpath
> +
> +ifeq ($(BR2_PACKAGE_ZLIB),y)
> +    DCMTK_DEPENDENCIES += zlib

DCMTK_CONF_OPT += --with-zlib

> +else
> +    DCMTK_CONF_OPT += --without-zlib
> +endif
> +VERBOSE=1

Huh?

> +
> +define DCMTK_CONFIG_SET
> +    $(CAT) $(@D)/config/Makefile.def | $(SED) 's%^$(1).*%$(1) = $(2)%g' \
> +    $(@D)/config/Makefile.def
> +endef

This would probably require a comment on top of it.

> +
> +define DCMTK_CONFIGURE_CMDS
> +    (cd $(@D); \
> +        CFLAGS="$(DCMTK_CFLAGS)" \
> +        CXXFLAGS="$(DCMTK_CXXFLAGS)" \
> +        CPPFLAGS="$(DCMTK_CPPFLAGS)" \
> +        LDFLAGS="$(DCMTK_LDFLAGS)" \
> +        ARFLAGS=cru \
> +        CC=$(TARGET_CC) \
> +        CXX=$(TARGET_CXX) \
> +        RANLIB=$(TARGET_RANLIB) \
> +        AR=$(TARGET_AR) \
> +        STRIP=$(TARGET_STRIP) \
> +        PKG_CONFIG_PATH="$(STAGING_DIR)/usr/lib/pkgconfig" \
> +        PKG_CONFIG_SYSROOT_DIR="$(STAGING_DIR)" \
> +        PKG_CONFIG="$(PKG_CONFIG_HOST_BINARY)" \
> +        MAKEFLAGS="$(MAKEFLAGS) -j$(PARALLEL_JOBS)" ./configure \
> +        $(if $(VERBOSE),-verbose,-silent) \
> +        $(DCMTK_CONF_OPT) \
> +        ac_cv_my_c_rightshift_unsigned=no --prefix=$(STAGING_DIR)/usr \
> +        --with-zlibinc=$(STAGING_DIR)/usr \
> +        --host=$(GNU_TARGET_NAME) \
> +    )
> +endef

Clearly, no. If your package uses the autotools build system, the
default configure command of the autotools-package infrastructure should
work fine, there's no need to duplicate it here. You can pass
environment variables using DCMTK_CONF_ENV, and configuration options
through DCMTK_CONF_OPT.

That being said, the dcmtk build system looks weird: the main configure
script is not the one generated by autoconf. So you're maybe not in the
canonical case of an autotools based package.

> +
> +define DCMTK_BUILD_CMDS
> +    $(call DCMTK_CONFIG_SET,"CC =",$(TARGET_CC))
> +    $(MAKE) -C $(@D) install-lib
> +endef

Same thing here, we normally don't want to duplicate the build command
definition, unless there's a really strong reason to do this.

> +
> +$(eval $(autotools-package))

Thanks!

Thomas
Thomas Petazzoni - June 12, 2014, 8:45 p.m.
Dear William Frost,

On Tue, 29 Apr 2014 08:58:14 +0900, William Frost wrote:
> It works fine but still every time I type "make all" in Buildroot dcmtk 
> make the configure process again. Any idea on how to solve this?

You have sent this patch on April, 29th, and received a number of
review comments on the same day. However, you have not resubmitted a
new version of your patch adding the DCMTK package that takes into
account the comments.

Are you still interested in getting the DCMTK package integrated in
Buildroot? Your contribution would definitely be welcome, but we cannot
keep patches pending if they are not being worked on until they are
merged.

Thanks for your contribution!

Thomas

Patch

diff --git a/package/Config.in b/package/Config.in
index 07fd166..b88c0b0 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -568,6 +568,7 @@  endmenu
  menu "Graphics"
  source "package/atk/Config.in"
  source "package/cairo/Config.in"
+source "package/dcmtk/Config.in"
  source "package/fltk/Config.in"
  source "package/fontconfig/Config.in"
  source "package/freetype/Config.in"
diff --git a/package/dcmtk/Config.in b/package/dcmtk/Config.in
new file mode 100644
index 0000000..ba9d2ee
--- /dev/null
+++ b/package/dcmtk/Config.in
@@ -0,0 +1,38 @@ 
+config BR2_PACKAGE_DCMTK
+    bool "dcmtk"
+    help
+      DCMTK is a collection of libraries and applications implementing
+      large parts the DICOM standard. It includes software for examining,
+      constructing and converting DICOM image files, handling offline
+      media, sending and receiving images over a network connection, as
+      well as demonstrative image storage and worklist servers. DCMTK is
+      is written in a mixture of ANSI C and C++. It comes in complete
+      source code and is made available as "open source" software.
+
+      http://dicom.offis.de/dcmtk.php.en
+
+if BR2_PACKAGE_DCMTK
+
+choice
+    prompt "DCMTK Version"
+    default BR2_PACKAGE_DCMTK_VERSION_3_6_0
+    help
+      Select the version of DCMTK you wish to use.
+
+    config BR2_PACKAGE_DCMTK_VERSION_3_6_0
+        bool "DCMTK 3.6.0"
+
+    config BR2_PACKAGE_DCMTK_VERSION_SNAPSHOT_2012
+        bool "DCMTK 3.6.1 snapshot (2012.11.02)"
+
+    config BR2_PACKAGE_DCMTK_VERSION_SNAPSHOT_2013
+        bool "DCMTK 3.6.1 snapshot (2013.11.14)"
+
+endchoice
+
+config BR2_PACKAGE_DCMTK_VERSION
+    string
+    default "3.6.0"    if BR2_PACKAGE_DCMTK_VERSION_3_6_0
+    default "3.6.1_20121102" if BR2_PACKAGE_DCMTK_VERSION_SNAPSHOT_2012
+    default "3.6.1_20131114" if BR2_PACKAGE_DCMTK_VERSION_SNAPSHOT_2013
+endif
diff --git a/package/dcmtk/dcmtk.mk b/package/dcmtk/dcmtk.mk
new file mode 100644
index 0000000..5c9a851
--- /dev/null
+++ b/package/dcmtk/dcmtk.mk
@@ -0,0 +1,85 @@ 
+################################################################################
+#
+# dcmtk
+#
+################################################################################
+DCMTK_VERSION = $(call qstrip,$(BR2_PACKAGE_DCMTK_VERSION))
+
+ifeq ($(BR2_PACKAGE_DCMTK_VERSION), "3.6.0")
+DCMTK_SITE = http://dicom.offis.de/download/dcmtk/dcmtk360/
+endif
+ifeq ($(BR2_PACKAGE_DCMTK_VERSION),"3.6.1_20121102")
+DCMTK_SITE = http://dicom.offis.de/download/dcmtk/snapshot/old
+endif
+ifeq ($(BR2_PACKAGE_DCMTK_VERSION),"3.6.1_20131114")
+DCMTK_SITE = http://dicom.offis.de/download/dcmtk/snapshot
+endif
+
+DCMTK_LICENSE = BSD
+DCMTK_LICENSE_FILES = COPYING
+DCMTK_INSTALL_STAGING = YES
+
+DCMTK_CFLAGS = $(TARGET_CFLAGS) --sysroot=$(STAGING_DIR) -O -D_REENTRANT \
+        -D_XOPEN_SOURCE_EXTENDED -D_XOPEN_SOURCE=500 -D_BSD_SOURCE \
+        -D_BSD_COMPAT -D_OSF_SOURCE -D_POSIX_C_SOURCE=199506L -Wall \
+        -Wno-psabi
+
+DCMTK_CXXFLAGS = $(TARGET_CFLAGS) --sysroot=$(STAGING_DIR) -O 
-D_REENTRANT \
+        -D_XOPEN_SOURCE_EXTENDED -D_XOPEN_SOURCE=500 -D_BSD_SOURCE \
+        -D_BSD_COMPAT -D_OSF_SOURCE -D_POSIX_C_SOURCE=199506L -Wall \
+        -Wno-psabi
+
+DCMTK_CPPFLAGS = $(TARGET_CFLAGS) --sysroot=$(STAGING_DIR)
+DCMTK_LDFLAGS = $(TARGET_CFLAGS) --sysroot=$(STAGING_DIR)
+
+DCMTK_INSTALL_STAGING_OPT = DESTDIR=$(STAGING_DIR) STRIP=$(TARGET_STRIP) \
+                install
+
+DCMTK_INSTALL_TARGET_OPT = DESTDIR=$(TARGET_DIR) STRIP=$(TARGET_STRIP) 
install
+
+DCMTK_CONF_OPT = --without-libtiff --without-openssl --without-libxml \
+          --without-libpng --without-libsndfile --disable-debug \
+          --without-private-tags --enable-std-includes --disable-rpath
+
+ifeq ($(BR2_PACKAGE_ZLIB),y)
+    DCMTK_DEPENDENCIES += zlib
+else
+    DCMTK_CONF_OPT += --without-zlib
+endif
+VERBOSE=1
+
+define DCMTK_CONFIG_SET
+    $(CAT) $(@D)/config/Makefile.def | $(SED) 's%^$(1).*%$(1) = $(2)%g' \
+    $(@D)/config/Makefile.def
+endef
+
+define DCMTK_CONFIGURE_CMDS
+    (cd $(@D); \
+        CFLAGS="$(DCMTK_CFLAGS)" \
+        CXXFLAGS="$(DCMTK_CXXFLAGS)" \
+        CPPFLAGS="$(DCMTK_CPPFLAGS)" \
+        LDFLAGS="$(DCMTK_LDFLAGS)" \
+        ARFLAGS=cru \
+        CC=$(TARGET_CC) \
+        CXX=$(TARGET_CXX) \
+        RANLIB=$(TARGET_RANLIB) \
+        AR=$(TARGET_AR) \
+        STRIP=$(TARGET_STRIP) \
+        PKG_CONFIG_PATH="$(STAGING_DIR)/usr/lib/pkgconfig" \
+        PKG_CONFIG_SYSROOT_DIR="$(STAGING_DIR)" \
+        PKG_CONFIG="$(PKG_CONFIG_HOST_BINARY)" \
+        MAKEFLAGS="$(MAKEFLAGS) -j$(PARALLEL_JOBS)" ./configure \
+        $(if $(VERBOSE),-verbose,-silent) \
+        $(DCMTK_CONF_OPT) \
+        ac_cv_my_c_rightshift_unsigned=no --prefix=$(STAGING_DIR)/usr \
+        --with-zlibinc=$(STAGING_DIR)/usr \
+        --host=$(GNU_TARGET_NAME) \
+    )
+endef
+
+define DCMTK_BUILD_CMDS
+    $(call DCMTK_CONFIG_SET,"CC =",$(TARGET_CC))
+    $(MAKE) -C $(@D) install-lib
+endef
+