cmd: rework "license" command
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Mon, 30 Jan 2017 02:12:08 +0000 (11:12 +0900)
committerTom Rini <trini@konsulko.com>
Wed, 8 Feb 2017 20:56:28 +0000 (15:56 -0500)
The previous commit ("add a new command to show .config contents")
improves the basic infrastructure of "embed a compressed file into
the U-Boot image, and print it by a command".  The same pattern for
the "license" command.

This commit reworks the command to improve the following:

[1] Improve log style

Kbuild style log

  GZIP    cmd/license_data.gz
  CHK     cmd/license_data_gz.h
  UPD     cmd/license_data_gz.h
  CHK     cmd/license_data_size.h
  UPD     cmd/license_data_size.h

instead of the bare Make log:

cat ./Licenses/gpl-2.0.txt | gzip -9 -c | \
tools/bin2header license_gzip > ./include/license.h

[2] Collect related code into the "cmd" directory

Prior to this commit, the license.h was created by tools/Makefile,
placed under the "include" directory, included from cmd/license.c,
and deleted by the top-level Makefile.  It is not a good idea to
scatter related code.

[3] Drop the fixed-malloc size LICENSE_MAX

Just allocate the minimum required size of buffer because we know
the size of the original gpl-2.0.txt.

[4] Fix more issues

Terminate the buffer with zero to prevent puts() from over-running.
Add "static" to do_license.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Makefile
cmd/.gitignore
cmd/Kconfig
cmd/Makefile
cmd/license.c
include/.gitignore
tools/Makefile
tools/bin2header.c [deleted file]

index 8e417969e99708684d6b2d542d349ec03b882373..c54fc0673e1524af9f70bd3db4bd1dd48a43c651 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1425,7 +1425,7 @@ CLEAN_DIRS  += $(MODVERDIR) \
               $(foreach d, spl tpl, $(patsubst %,$d/%, \
                        $(filter-out include, $(shell ls -1 $d 2>/dev/null))))
 
-CLEAN_FILES += include/bmp_logo.h include/bmp_logo_data.h include/license.h \
+CLEAN_FILES += include/bmp_logo.h include/bmp_logo_data.h \
               boot* u-boot* MLO* SPL System.map
 
 # Directories & files removed with 'make mrproper'
index 7800586e8a0fb291247fc6dadbef6b0c9897daf6..bab889fd3d70efcb6ef87b2b120f6ff03558c2ce 100644 (file)
@@ -1,3 +1,6 @@
 config_data.gz
 config_data_gz.h
 config_data_size.h
+license_data.gz
+license_data_gz.h
+license_data_size.h
index 57e8e42f98c04ef3af6b2bc7fe457171bd25df4b..25ac8955482dccaab896768d479c9fc21019661d 100644 (file)
@@ -154,6 +154,7 @@ config CMD_CPU
 
 config CMD_LICENSE
        bool "license"
+       select BUILD_BIN2C
        help
          Print GPL license text
 
index 1a04e7e818c655bc76f97a06394630e903b4d17d..f13bb8c11ecb34fd48083cc1c1b83dc115061e39 100644 (file)
@@ -187,3 +187,18 @@ $(obj)/config_data_gz.h: $(obj)/config_data.gz FORCE
 targets += config_data_size.h
 $(obj)/config_data_size.h: $(KCONFIG_CONFIG) FORCE
        $(call filechk,data_size)
+
+# "license" command
+$(obj)/license.o: $(obj)/license_data_gz.h $(obj)/license_data_size.h
+
+targets += license_data.gz
+$(obj)/license_data.gz: $(srctree)/Licenses/gpl-2.0.txt FORCE
+       $(call if_changed,gzip)
+
+targets += license_data_gz.h
+$(obj)/license_data_gz.h: $(obj)/license_data.gz FORCE
+       $(call filechk,data_gz)
+
+targets += license_data_size.h
+$(obj)/license_data_size.h: $(srctree)/Licenses/gpl-2.0.txt FORCE
+       $(call filechk,data_size)
index 5ee57f8ca3d922cc96c1ba00fd00ae596c32d1fb..29fc8aa9a41fba47c0851680ec6a2c0fc2470f21 100644 (file)
@@ -6,31 +6,36 @@
  */
 
 #include <common.h>
-
-/* Licenses/gpl-2.0.txt is currently 18092 bytes in size */
-#define LICENSE_MAX    20480
-
 #include <command.h>
 #include <malloc.h>
-#include <license.h>
 
-int do_license(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+#include "license_data_gz.h"
+#include "license_data_size.h"
+
+static int do_license(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
-       char *dst = malloc(LICENSE_MAX);
-       unsigned long len = LICENSE_MAX;
+       char *dst;
+       unsigned long len = data_size;
+       int ret = CMD_RET_SUCCESS;
 
+       dst = malloc(data_size + 1);
        if (!dst)
-               return -1;
+               return CMD_RET_FAILURE;
 
-       if (gunzip(dst, LICENSE_MAX, license_gzip, &len) != 0) {
+       ret = gunzip(dst, data_size, (unsigned char *)data_gz, &len);
+       if (ret) {
                printf("Error uncompressing license text\n");
-               free(dst);
-               return -1;
+               ret = CMD_RET_FAILURE;
+               goto free;
        }
+
+       dst[data_size] = 0;
        puts(dst);
+
+free:
        free(dst);
 
-       return 0;
+       return ret;
 }
 
 U_BOOT_CMD(
index 75be5270b16ddd16ba8e93c7aeeba62173a6243e..8e41a9511d47b77f04463d340037d14390e13974 100644 (file)
@@ -2,4 +2,3 @@
 /bmp_logo.h
 /bmp_logo_data.h
 /config.h
-/license.h
index f5ac6313e1f1b6867a2340b8fdf7bd045588971c..cbccd4ab91ae167b4d5daabf2e251bdc2b6e0234 100644 (file)
@@ -32,7 +32,6 @@ CONFIG_BUILD_ENVCRC ?= $(ENVCRC-y)
 
 hostprogs-$(CONFIG_SPL_GENERATE_ATMEL_PMECC_HEADER) += atmel_pmecc_params
 
-hostprogs-$(CONFIG_CMD_LICENSE) += bin2header
 hostprogs-$(CONFIG_LCD_LOGO) += bmp_logo
 hostprogs-$(CONFIG_VIDEO_LOGO) += bmp_logo
 HOSTCFLAGS_bmp_logo.o := -pedantic
@@ -233,10 +232,6 @@ endif
 
 endif # !LOGO_BMP
 
-# Generated gziped GPL-2.0 license text
-LICENSE_H = $(objtree)/include/license.h
-LICENSE-$(CONFIG_CMD_LICENSE) += $(LICENSE_H)
-
 #
 # Use native tools and options
 # Define __KERNEL_STRICT_NAMES to prevent typedef overlaps
@@ -251,7 +246,7 @@ HOST_EXTRACFLAGS += -include $(srctree)/include/libfdt_env.h \
                -D__KERNEL_STRICT_NAMES \
                -D_GNU_SOURCE
 
-__build:       $(LOGO-y) $(LICENSE-y)
+__build:       $(LOGO-y)
 
 $(LOGO_H):     $(obj)/bmp_logo $(LOGO_BMP)
        $(obj)/bmp_logo --gen-info $(LOGO_BMP) > $@
@@ -259,10 +254,6 @@ $(LOGO_H): $(obj)/bmp_logo $(LOGO_BMP)
 $(LOGO_DATA_H):        $(obj)/bmp_logo $(LOGO_BMP)
        $(obj)/bmp_logo --gen-data $(LOGO_BMP) > $@
 
-$(LICENSE_H): $(obj)/bin2header $(srctree)/Licenses/gpl-2.0.txt
-       cat $(srctree)/Licenses/gpl-2.0.txt | gzip -9 -c | \
-               $(obj)/bin2header license_gzip > $(LICENSE_H)
-
 # Let clean descend into subdirs
 subdir- += env
 
diff --git a/tools/bin2header.c b/tools/bin2header.c
deleted file mode 100644 (file)
index 6c2c23f..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/* bin2header.c - program to convert binary file into a C structure
- * definition to be included in a header file.
- *
- * (C) Copyright 2008 by Harald Welte <laforge@openmoko.org>
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-
-int main(int argc, char **argv)
-{
-       if (argc < 2) {
-               fprintf(stderr, "%s needs one argument: the structure name\n",
-                       argv[0]);
-               exit(1);
-       }
-
-       printf("/* bin2header output - automatically generated */\n");
-       printf("unsigned char %s[] = {\n", argv[1]);
-
-       while (1) {
-               int i, nread;
-               unsigned char buf[10];
-               nread = read(0, buf, sizeof(buf));
-               if (nread <= 0)
-                       break;
-
-               printf("\t");
-               for (i = 0; i < nread - 1; i++)
-                       printf("0x%02x, ", buf[i]);
-
-               printf("0x%02x,\n", buf[nread-1]);
-       }
-
-       printf("};\n");
-
-       exit(0);
-}