From 066996143ee597cc94ffc6d27751301931afad30 Mon Sep 17 00:00:00 2001 From: malaterre Date: Tue, 19 Jul 2005 14:43:46 +0000 Subject: [PATCH] ENH: Adding a deprecation mechanism to gdcm via two MACRO and two config options --- CMakeLists.txt | 6 ++++++ gdcmConfigure.h.in | 9 ++++++-- src/gdcmCommon.h | 6 ++++-- src/gdcmDebug.h | 52 ++++++++++++++++++++++++++++++++++++++++++++-- src/gdcmFile.cxx | 39 ++++++++++++++++++++-------------- src/gdcmFile.h | 6 +++--- 6 files changed, 93 insertions(+), 25 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ec8a27d7..69b71677 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,6 +16,12 @@ SET(GDCM_DATA_DIR "/share/gdcm/" CACHE INTERNAL "Install location for data (relative to prefix).") MARK_AS_ADVANCED(GDCM_DATA_DIR) +#----------------------------------------------------------------------------- +# Provide compatibility options. +OPTION(GDCM_LEGACY_REMOVE "Remove all legacy code completely." OFF) +OPTION(GDCM_LEGACY_SILENT "Silence all legacy code messages." OFF) +MARK_AS_ADVANCED(GDCM_LEGACY_REMOVE GDCM_LEGACY_SILENT) + #----------------------------------------------------------------------------- # Build shared lib by default OPTION(GDCM_BUILD_SHARED_LIBS "Build GDCM with shared libraries." ON) diff --git a/gdcmConfigure.h.in b/gdcmConfigure.h.in index 3a56d724..ecec6f13 100644 --- a/gdcmConfigure.h.in +++ b/gdcmConfigure.h.in @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmConfigure.h.in,v $ Language: C++ - Date: $Date: 2005/06/07 14:41:46 $ - Version: $Revision: 1.16 $ + Date: $Date: 2005/07/19 14:43:46 $ + Version: $Revision: 1.17 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -80,5 +80,10 @@ #define GDCM_BUILD_VERSION @GDCM_BUILD_VERSION@ #define GDCM_VERSION "@GDCM_VERSION@" +/*--------------------------------------------------------------------------*/ +/* GDCM deprecation mechanism */ +#cmakedefine GDCM_LEGACY_REMOVE +#cmakedefine GDCM_LEGACY_SILENT + #endif diff --git a/src/gdcmCommon.h b/src/gdcmCommon.h index c2a23850..c78b0013 100644 --- a/src/gdcmCommon.h +++ b/src/gdcmCommon.h @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmCommon.h,v $ Language: C++ - Date: $Date: 2005/07/18 10:20:20 $ - Version: $Revision: 1.81 $ + Date: $Date: 2005/07/19 14:43:48 $ + Version: $Revision: 1.82 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -97,6 +97,8 @@ typedef unsigned int uint32_t; #include #endif + +//----------------------------------------------------------------------------- /// \brief namespace for Grass root DiCoM namespace gdcm { diff --git a/src/gdcmDebug.h b/src/gdcmDebug.h index 5f834ce1..85eda8b3 100644 --- a/src/gdcmDebug.h +++ b/src/gdcmDebug.h @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDebug.h,v $ Language: C++ - Date: $Date: 2005/06/21 14:05:06 $ - Version: $Revision: 1.35 $ + Date: $Date: 2005/07/19 14:43:48 $ + Version: $Revision: 1.36 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -190,4 +190,52 @@ public: } #endif //NDEBUG +//----------------------------------------------------------------------------- +// +// Define GDCM_LEGACY macro to mark legacy methods where they are +// declared in their class. Example usage: +// +// // @deprecated Replaced by MyOtherMethod() as of gdcm 2.0. +// GDCM_LEGACY(void MyMethod()); +#if defined(GDCM_LEGACY_REMOVE) + // Remove legacy methods completely. +# define GDCM_LEGACY(method) +#elif defined(GDCM_LEGACY_SILENT) + // Provide legacy methods with no warnings. +# define GDCM_LEGACY(method) method +#else + // Setup compile-time warnings for uses of deprecated methods if + // possible on this compiler. +# if defined(__GNUC__) && !defined(__INTEL_COMPILER) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) +# define GDCM_LEGACY(method) method __attribute__((deprecated)) +# elif defined(_MSC_VER) && _MSC_VER >= 1300 +# define GDCM_LEGACY(method) __declspec(deprecated) method +# else +# define GDCM_LEGACY(method) method +# endif +#endif + +// Macros to create runtime deprecation warning messages in function +// bodies. Example usage: +// +// void MyClass::MyOldMethod() +// { +// GDCM_LEGACY_BODY(MyClass::MyOldMethod, 2.0); +// } +// +// void MyClass::MyMethod() +// { +// GDCM_LEGACY_REPLACED_BODY(MyClass::MyMethod, 5.0, +// MyClass::MyOtherMethod); +// } +#if defined(GDCM_LEGACY_REMOVE) || defined(GDCM_LEGACY_SILENT) +# define GDCM_LEGACY_BODY(method, version) +# define GDCM_LEGACY_REPLACED_BODY(method, version, replace) +#else +# define GDCM_LEGACY_BODY(method, version) \ + gdcmWarningMacro(#method " was deprecated for gdcm" #version " and will be removed in a future version.") +# define GDCM_LEGACY_REPLACED_BODY(method, version, replace) \ + gdcmWarningMacro(#method " was deprecated for gdcm" #version " and will be removed in a future version. Use " #replace " instead.") +#endif + #endif diff --git a/src/gdcmFile.cxx b/src/gdcmFile.cxx index 214d8035..09a9e8fd 100644 --- a/src/gdcmFile.cxx +++ b/src/gdcmFile.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmFile.cxx,v $ Language: C++ - Date: $Date: 2005/07/07 16:37:40 $ - Version: $Revision: 1.249 $ + Date: $Date: 2005/07/19 14:43:48 $ + Version: $Revision: 1.250 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -98,20 +98,6 @@ bool File::Load( ) return DoTheLoadingJob( ); } -/** - * \brief Loader. (DEPRECATED : not to break the API) - * @param fileName file to be open for parsing - * @return false if file cannot be open or no swap info was found, - * or no tag was found. - */ -bool File::Load( std::string const &fileName ) -{ - SetFileName( fileName ); - if ( ! this->Document::Load( ) ) - return false; - - return DoTheLoadingJob( ); -} /** * \brief Does the Loading Job (internal use only) @@ -1725,6 +1711,27 @@ void File::ReadAndSkipEncapsulatedBasicOffsetTable() } } +// These are the deprecated method that one day should be removed (after the next release) +#ifndef GDCM_LEGACY_REMOVE +/** + * \brief Loader. (DEPRECATED : not to break the API) + * @param fileName file to be open for parsing + * @return false if file cannot be open or no swap info was found, + * or no tag was found. + * @deprecated Use the Load() function instead + */ +bool File::Load( std::string const &fileName ) +{ + GDCM_LEGACY_REPLACED_BODY(File::Load(std::string), "1.2", + File::Load()); + SetFileName( fileName ); + if ( ! this->Document::Load( ) ) + return false; + + return DoTheLoadingJob( ); +} +#endif + //----------------------------------------------------------------------------- // Print diff --git a/src/gdcmFile.h b/src/gdcmFile.h index 3c0d8a25..47abfd64 100644 --- a/src/gdcmFile.h +++ b/src/gdcmFile.h @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmFile.h,v $ Language: C++ - Date: $Date: 2005/07/07 16:37:41 $ - Version: $Revision: 1.108 $ + Date: $Date: 2005/07/19 14:44:57 $ + Version: $Revision: 1.109 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -100,7 +100,7 @@ public: ~File(); // Loading - bool Load( std::string const &filename ); + GDCM_LEGACY(bool Load( std::string const &filename )); bool Load(); // Standard values and informations contained in the header bool IsReadable(); -- 2.45.0