[getdns-users] [PATCH] remove GETDNS_COMPILATION_COMMENT

Willem Toorop willem at nlnetlabs.nl
Thu Jul 9 08:11:20 UTC 2015


Thank you Daniel,

The way it works now is ordained by the API specification.
I quote from section 10.2:

	The API's .h file contains a macro called
	GETDNS_COMPILATION_COMMENT. This can be useful to an
	application which will use the API because it can check the
	string without calling any functions. Each time the API
	implementation is compiled, this string should be updated with
	unique information about the implementation build.

The define from the getdns_core_only.h file from the API spec tarball,
has this value:

	
	#define GETDNS_COMPILATION_COMMENT The API implementation should fill
in something here, such as a compilation version string and date, and
change it each time the API is compiled.

Hence the way it is.

We can change of course, with the consensus of the people on the API
list (CC'ed).  You could propose some new text.

Cheers,

-- Willem

Op 08-07-15 om 19:51 schreef Daniel Kahn Gillmor:
> It's not clear that GETDNS_COMPILATION_COMMENT is useful; as a header
> (a #define), it's likely to get embedded in applications during their
> build time.  It is not embedded in the library itself at all, so
> removal of it doesn't change the ABI (there is a slight change in the
> API because the #define is no longer visible in getdns.h, but i think
> this is OK, see below).
> 
> When a built application that uses GETDNS_COMPILATION_COMMENT is
> executed, linked against a different version of the library it was
> built from, there is no way to detect that these values differ.  How
> is it useful at runtime?
> 
> The #define also introduces arbitrariness in the getdns build process
> when --with-current-date isn't supplied, because it embeds the current
> timestamp in getdns.h.  This makes it more difficult to build a
> byte-for-byte reproducible binary package.
> 
> http://codesearch.debian.net/results/GETDNS_COMPILATION_COMMENT
> indicates that there are no projects in debian actually using the
> defined variable (there may be non-debian projects that use it, though
> it's not clear how it is expected to be used at runtime at all).
> 
> Removing this #define removes a source of confusion for users of the
> project, and doesn't change the ABI.
> ---
>  ChangeLog              |  1 +
>  configure              | 15 ---------------
>  configure.ac           |  9 ---------
>  spec/index.html        |  5 -----
>  src/getdns/getdns.h.in |  2 --
>  5 files changed, 1 insertion(+), 31 deletions(-)
> 
> diff --git a/ChangeLog b/ChangeLog
> index a70879d..438c1b5 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -5,6 +5,7 @@
>      GETDNS_TRANSPORT_STARTTLS.
>    * Added new context setting for idle_timeout
>    * CSYNC RR type
> +  * remove GETDNS_COMPILATION_COMMENT, CURRENT_DATE, and --with-current-date
>  
>  * 2015-05-21: Version 0.2.0
>    * Fix libversion numbering:  Thanks Daniel Kahn Gillmor
> diff --git a/configure b/configure
> index c86c59f..9e01aab 100755
> --- a/configure
> +++ b/configure
> @@ -706,7 +706,6 @@ LDFLAGS
>  CFLAGS
>  CC
>  GETDNS_LIBVERSION
> -GETDNS_COMPILATION_COMMENT
>  RELEASE_CANDIDATE
>  target_alias
>  host_alias
> @@ -749,7 +748,6 @@ SHELL'
>  ac_subst_files=''
>  ac_user_opts='
>  enable_option_checking
> -with_current_date
>  enable_shared
>  enable_static
>  with_pic
> @@ -1420,8 +1418,6 @@ Optional Features:
>  Optional Packages:
>    --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
>    --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
> -  --with-current-date
> -    current date of the compilation, set to fixed date for reproducible builds [default=system]
>  
>    --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
>                            both]
> @@ -2371,17 +2367,6 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
>  
>  
>  
> -# Set current date from system if not set
> -
> -# Check whether --with-current-date was given.
> -if test "${with_current_date+set}" = set; then :
> -  withval=$with_current_date; CURRENT_DATE="$with_current_date"
> -else
> -  CURRENT_DATE="`date -u +%Y-%m-%dT%H:%M:%SZ`"
> -fi
> -
> -GETDNS_COMPILATION_COMMENT="getdns 0.2.0 configured on $CURRENT_DATE for the January 2015 version of the API"
> -
>  # Library version
>  # ---------------
>  # current:revision:age
> diff --git a/configure.ac b/configure.ac
> index 48bb399..ef060ea 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -34,14 +34,6 @@ AC_PREREQ([2.56])
>  AC_INIT([getdns], [0.2.0], [stub-resolver at verisignlabs.com], [], [http://getdnsapi.net])
>  AC_SUBST(RELEASE_CANDIDATE, [])
>  
> -# Set current date from system if not set
> -AC_ARG_WITH([current-date],
> -  [AS_HELP_STRING([--with-current-date]
> -    [current date of the compilation, set to fixed date for reproducible builds @<:@default=system@:>@])],
> -  [CURRENT_DATE="$with_current_date"],
> -  [CURRENT_DATE="`date -u +%Y-%m-%dT%H:%M:%SZ`"])
> -GETDNS_COMPILATION_COMMENT="AC_PACKAGE_STRING configured on $CURRENT_DATE for the January 2015 version of the API"
> -
>  # Library version
>  # ---------------
>  # current:revision:age
> @@ -62,7 +54,6 @@ GETDNS_COMPILATION_COMMENT="AC_PACKAGE_STRING configured on $CURRENT_DATE for th
>  #
>  GETDNS_LIBVERSION=2:2:1
>  
> -AC_SUBST(GETDNS_COMPILATION_COMMENT)
>  AC_SUBST(GETDNS_LIBVERSION)
>  AC_CONFIG_SRCDIR([src/getdns/getdns.h.in])
>  # AM_INIT_AUTOMAKE
> diff --git a/spec/index.html b/spec/index.html
> index a98e37c..a6dd53a 100644
> --- a/spec/index.html
> +++ b/spec/index.html
> @@ -2521,11 +2521,6 @@ of this API must support synchronous calls with <code>getdns_general_sync()</cod
>  this API is "getdns April 2013". Each implementation is free to set the implementation string as it
>  feels fit.</p>
>  
> -<p>The API's .h file contains a macro called <code>GETDNS_COMPILATION_COMMENT</code>. This can be useful
> -to an application which will use the API because it can check the string without calling any
> -functions. Each time the API implementation is compiled, this string should be updated with unique
> -information about the implementation build.</p>
> -
>  <p>The implementation of both the async and sync <code>getdns</code> functions will
>  copy all the values of the parameters into local memory, in case the application changes or
>  deallocates them.</p>
> diff --git a/src/getdns/getdns.h.in b/src/getdns/getdns.h.in
> index 3f133a4..133d9cb 100644
> --- a/src/getdns/getdns.h.in
> +++ b/src/getdns/getdns.h.in
> @@ -44,8 +44,6 @@
>  extern "C" {
>  #endif
>  
> -#define GETDNS_COMPILATION_COMMENT "@GETDNS_COMPILATION_COMMENT@"
> -
>  /* Return values */
>  typedef enum getdns_return_t {
>  	GETDNS_RETURN_GOOD = 0,
> 




More information about the Users mailing list