[Buildroot] [PATCH 1/1] tzdata: Improve right/posix installation

Mylene Josserand mylene.josserand at free-electrons.com
Thu Oct 27 20:04:10 UTC 2016


Hello,


On 26/10/2016 00:09, Thomas Petazzoni wrote:
> Hello,
>
> On Tue, 25 Oct 2016 23:48:26 +0200, Mylène Josserand wrote:
>> Improve the right/posix timezone installation by creating new options
>> to choose between these two versions. As one version is necessary, the
>> default one is posix.
>> Now, the user can install both versions or one of both. It reduces the
>> image size when only one version is needed.
>>
>> Signed-off-by: Mylène Josserand <mylene.josserand at free-electrons.com>
>
> Thanks Mylène for your patch. It would be good to explain in the commit
> log why you are proposing this change.


Okay, I will try to be more explicit in the V2.


>> diff --git a/package/tzdata/tzdata.mk b/package/tzdata/tzdata.mk
>> index de7d1be..d1ed21c 100644
>> --- a/package/tzdata/tzdata.mk
>> +++ b/package/tzdata/tzdata.mk
>> @@ -32,10 +32,20 @@ TZDATA_EXTRACT_CMDS =
>>  define TZDATA_INSTALL_TARGET_CMDS
>>  	$(INSTALL) -d -m 0755 $(TARGET_DIR)/usr/share/zoneinfo
>>  	cp -a $(HOST_DIR)/usr/share/zoneinfo/* $(TARGET_DIR)/usr/share/zoneinfo
>> -	cd $(TARGET_DIR)/usr/share/zoneinfo;    \
>> -	for zone in posix/*; do                 \
>> -	    ln -sfn "$${zone}" "$${zone##*/}";  \
>> -	done
>> +	cd $(TARGET_DIR)/usr/share/zoneinfo;     \
>> +	if [ -n "$(BR2_TARGET_TZ_POSIX)" ]; then \
>> +		for zone in posix/*; do \
>> +			ln -sfn "$${zone}" "$${zone##*/}"; \
>> +		done \
>> +	fi;
>> +	# If "right" is the only version enabled
>> +	cd $(TARGET_DIR)/usr/share/zoneinfo; \
>> +	if [ -n "$(BR2_TARGET_TZ_RIGHT)" ] && [ -z "$(BR2_TARGET_TZ_POSIX)" ]; then \
>> +		for zone in right/*; do \
>> +			ln -sfn "$${zone}" "$${zone##*/}"; \
>> +		done \
>> +	fi;
>
> It's a bit late now, so I'm not sure what's going on here. But for
> sure, I'd like this to be handled using make conditionals and not shell
> conditionals.

The current version creates links to have /usr/share/zoneinfo/Etc/ which 
is linked to /usr/share/zoneinfo/posix/Etc/, for example.
In case we have only "right" version installed, these links must be 
updated to use the "right" folder instead of the "posix" one. This is 
what I added here.

>> +
>>  	if [ -n "$(TZDATA_LOCALTIME)" ]; then                           \
>>  	    if [ ! -f $(TARGET_DIR)/usr/share/zoneinfo/$(TZDATA_LOCALTIME) ]; then \
>>  	        printf "Error: '%s' is not a valid timezone, check your BR2_TARGET_LOCALTIME setting\n" \
>> @@ -51,8 +61,12 @@ endef
>>  define HOST_TZDATA_BUILD_CMDS
>>  	(cd $(@D); \
>>  		for zone in $(TZDATA_ZONELIST); do \
>> -			$(ZIC) -d _output/posix -y yearistype.sh $$zone || exit 1; \
>> -			$(ZIC) -d _output/right -L leapseconds -y yearistype.sh $$zone || exit 1; \
>> +			if [ -n "$(BR2_TARGET_TZ_POSIX)" ]; then \
>> +				$(ZIC) -d _output/posix -y yearistype.sh $$zone || exit 1; \
>> +			fi; \
>> +			if [ -n "$(BR2_TARGET_TZ_RIGHT)" ]; then \
>> +				$(ZIC) -d _output/right -L leapseconds -y yearistype.sh $$zone || exit 1; \
>> +			fi; \
>>  		done; \
>
> Ditto here, we need to use more the make language and less the shell
> language.
>
> Perhaps:
>
> ifeq ($(BR2_TARGET_TZ_POSIX),y)
> define HOST_TZDATA_BUILD_TZ_POSIX
> 	cd $(@D) ; \
> 	$(foreach zone,$(TZDATA_ZONELIST),\
> 		$(ZIC) -d output/posix -y yearistype.sh $(zone)
> 	)
> endef
> endif
>
> ifeq ($(BR2_TARGET_TZ_RIGHT),y)
> define HOST_TZDATA_BUILD_TZ_RIGHT
> 	cd $(@D) ; \
> 	$(foreach zone,$(TZDATA_ZONELIST),\
> 		$(ZIC) -d output/right -L leapseconds -y yearistype.sh $(zone)
> 	)
> endef
> endif
>
> define HOST_TZDATA_BUILD_CMDS
> 	$(HOST_TZDATA_BUILD_TZ_POSIX)
> 	$(HOST_TZDATA_BUILD_TZ_RIGHT)
> endef
>
>>  	)
>>  endef


okay, I see. I did not know that the make language should be preferred. 
I will keep it in mind for next times.


>> diff --git a/system/Config.in b/system/Config.in
>> index f9a3bda..dcc9f6b 100644
>> --- a/system/Config.in
>> +++ b/system/Config.in
>> @@ -429,6 +429,7 @@ config BR2_TARGET_TZ_INFO
>>  	select BR2_PACKAGE_TZDATA if BR2_TOOLCHAIN_USES_GLIBC
>>  	select BR2_PACKAGE_TZDATA if BR2_TOOLCHAIN_USES_MUSL
>>  	select BR2_PACKAGE_TZ if BR2_TOOLCHAIN_USES_UCLIBC
>> +	select BR2_TARGET_TZ_POSIX if ! BR2_TARGET_TZ_RIGHT
>
> No space after !
>

Noted.

>>  	help
>>  	  Say 'y' here to install timezone info.
>>
>> @@ -461,6 +462,20 @@ config BR2_TARGET_LOCALTIME
>>  	  If empty, no local time will be set, and the dates will be
>>  	  expressed in UTC.
>>
>> +config BR2_TARGET_TZ_POSIX
>> +	tristate "Install the Posix timezone"
>
> Don't use tristate, there is no meaning in Buildroot for an option to
> be enabled as a module.
>
> Also, you want to have:
>
> 	default y
>
> in order to preserve the existing behavior.
>

Okay

>> +	help
>> +	  The time zone can be provided by two versions : a posix and a right version.
>> +	  The "posix" version is based on the Coordinated Universal Time (UTC).
>> +	  This is the default one.
>
> Lines are too long, they should be wrapper at 72 characters. Also, I
> think a better wording would be:
>
> 	  Each time zone is provided in two versions: a "posix" version
> 	  and a "right" version. This option enables the installation
> 	  of the "posix" version of all time zone data. The "posix"
> 	  version is based on the Coordinated Universal Time (UTC), and
> 	  does not take leap seconds into account.
>

Thank you for the new description.

>> +
>> +config BR2_TARGET_TZ_RIGHT
>> +	tristate "Install the Right timezone"
>
> Same comments as above: use bool, and add "default y".
>
>> +	help
>> +	  The time zone can be provided by two versions : a posix and a right version.
>> +	  The "right" version is based on the International Atomic Time (TAI) and
>> +	  includes the leap seconds.
>
> Similar rework of the help text would be useful.


Thanks for the review!

Best regards,

-- 
Mylène Josserand, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com



More information about the buildroot mailing list