mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-25 17:00:34 +05:00
Improve new MG license mechanism to make it work on Windows
Use additional functions of MGKEYGEN for version detection to work on Windows (thanks to Nabil) Use spaces instead of tabs Ensure backward compatibility using either functions from .so/dll or environment variables MESHGEMS_VERSION_MAJOR/MINOR/PATCH defined in SAT remove blank space Fix coding style
This commit is contained in:
parent
e1d1e96602
commit
a53a9fc74d
@ -447,12 +447,10 @@ namespace SMESHUtils_MGLicenseKeyGen // API implementation
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
// get the key from KeyGen
|
typedef bool (*SignFun)(const std::string& );
|
||||||
std::string key = SMESHUtils_MGLicenseKeyGen::GetKey(error);
|
|
||||||
typedef int (*SignFun)(const char* );
|
|
||||||
|
|
||||||
// specific function to unlock each product
|
// specific function to unlock each product
|
||||||
std::string function = "meshgems_" + product + "_unlock_product";
|
std::string function = "UnlockProduct";
|
||||||
|
|
||||||
SignFun signFun = (SignFun) GetProc( theLibraryHandle, function.c_str() );
|
SignFun signFun = (SignFun) GetProc( theLibraryHandle, function.c_str() );
|
||||||
if ( !signFun )
|
if ( !signFun )
|
||||||
@ -464,16 +462,15 @@ namespace SMESHUtils_MGLicenseKeyGen // API implementation
|
|||||||
{
|
{
|
||||||
SMESH_TRY;
|
SMESH_TRY;
|
||||||
|
|
||||||
int status = signFun( key.c_str() );
|
ok = signFun( product.c_str() );
|
||||||
// MeshGems status: 0: OK, 1: warning, -1: error
|
|
||||||
ok = status >= 0;
|
|
||||||
|
|
||||||
SMESH_CATCH( SMESH::returnError );
|
SMESH_CATCH( SMESH::returnError );
|
||||||
|
|
||||||
if ( !error.empty() )
|
if ( !error.empty() )
|
||||||
{
|
{
|
||||||
ok = false;
|
std::cerr << "error: " << error << std::endl;
|
||||||
}
|
ok = false;
|
||||||
|
}
|
||||||
else if ( !ok )
|
else if ( !ok )
|
||||||
error = "UnlockProduct() failed (located in '" + libraryFile._name + "')";
|
error = "UnlockProduct() failed (located in '" + libraryFile._name + "')";
|
||||||
}
|
}
|
||||||
@ -492,13 +489,13 @@ namespace SMESHUtils_MGLicenseKeyGen // API implementation
|
|||||||
{
|
{
|
||||||
const char *meshGemsOldStyleEnvVar( getenv( MESHGEMS_OLD_STYLE ) );
|
const char *meshGemsOldStyleEnvVar( getenv( MESHGEMS_OLD_STYLE ) );
|
||||||
if ( !meshGemsOldStyleEnvVar || strlen(meshGemsOldStyleEnvVar) == 0 )
|
if ( !meshGemsOldStyleEnvVar || strlen(meshGemsOldStyleEnvVar) == 0 )
|
||||||
{
|
{
|
||||||
if (NeedsMGSpatialEnvLicense(error))
|
if (NeedsMGSpatialEnvLicense(error))
|
||||||
// SignCAD is only called by cadsurf. Other components call SignMesh
|
// SignCAD is only called by cadsurf. Other components call SignMesh
|
||||||
return UnlockProduct("cadsurf", error);
|
return UnlockProduct("cadsurf", error);
|
||||||
else
|
else
|
||||||
return SignCAD_After(meshgems_cad, error);
|
return SignCAD_After(meshgems_cad, error);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -555,14 +552,14 @@ namespace SMESHUtils_MGLicenseKeyGen // API implementation
|
|||||||
{
|
{
|
||||||
const char *meshGemsOldStyleEnvVar( getenv( MESHGEMS_OLD_STYLE ) );
|
const char *meshGemsOldStyleEnvVar( getenv( MESHGEMS_OLD_STYLE ) );
|
||||||
if ( !meshGemsOldStyleEnvVar || strlen(meshGemsOldStyleEnvVar) == 0 )
|
if ( !meshGemsOldStyleEnvVar || strlen(meshGemsOldStyleEnvVar) == 0 )
|
||||||
{
|
{
|
||||||
if (NeedsMGSpatialEnvLicense(error))
|
if (NeedsMGSpatialEnvLicense(error))
|
||||||
// unlock product (MG 2.15)
|
// unlock product (MG 2.15)
|
||||||
return UnlockProduct(product, error);
|
return UnlockProduct(product, error);
|
||||||
else
|
else
|
||||||
// sign the mesh (MG 2.13 and 2.14)
|
// sign the mesh (MG 2.13 and 2.14)
|
||||||
return SignMesh_After(meshgems_mesh, error);
|
return SignMesh_After(meshgems_mesh, error);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
// use DLIM8 server (nothing to do here)
|
// use DLIM8 server (nothing to do here)
|
||||||
return true;
|
return true;
|
||||||
@ -579,11 +576,11 @@ namespace SMESHUtils_MGLicenseKeyGen // API implementation
|
|||||||
//================================================================================
|
//================================================================================
|
||||||
|
|
||||||
std::string GetKey_After(const std::string& gmfFile,
|
std::string GetKey_After(const std::string& gmfFile,
|
||||||
int nbVertex,
|
int nbVertex,
|
||||||
int nbEdge,
|
int nbEdge,
|
||||||
int nbFace,
|
int nbFace,
|
||||||
int nbVol,
|
int nbVol,
|
||||||
std::string& error)
|
std::string& error)
|
||||||
{
|
{
|
||||||
std::string key;
|
std::string key;
|
||||||
LibraryFile libraryFile;
|
LibraryFile libraryFile;
|
||||||
@ -639,78 +636,98 @@ namespace SMESHUtils_MGLicenseKeyGen // API implementation
|
|||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//================================================================================
|
||||||
|
/*!
|
||||||
|
* \brief Get MeshGems version major/minor/patch from the environment variables
|
||||||
|
* \param [out] error - return error description
|
||||||
|
* \return int - the version
|
||||||
|
*/
|
||||||
|
//================================================================================
|
||||||
|
int GetMGVersionFromEnv(const char* env_variable)
|
||||||
|
{
|
||||||
|
MESSAGE("Entering GetMGVersionFromEnv and calling " << env_variable);
|
||||||
|
int version = -1;
|
||||||
|
if (getenv(env_variable) == nullptr )
|
||||||
|
{
|
||||||
|
MESSAGE("Could not find " << env_variable << " from environment");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
version = std::stoi(std::string(getenv(env_variable)));
|
||||||
|
}
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
//================================================================================
|
||||||
|
/*!
|
||||||
|
* \brief Get MeshGems version major/minor/patch from the keygen library and meshgems built-in functions
|
||||||
|
* \param [out] error - return error description
|
||||||
|
* \return int - the function implemented in the library
|
||||||
|
*/
|
||||||
|
//================================================================================
|
||||||
|
int GetMGVersionFromFunction(const char* function_name)
|
||||||
|
{
|
||||||
|
MESSAGE("Entering GetMGVersionFromFunction and calling " << function_name);
|
||||||
|
int version = -1;
|
||||||
|
typedef int (*GetKeyFun)();
|
||||||
|
GetKeyFun keyFun = (GetKeyFun) GetProc( theLibraryHandle, function_name);
|
||||||
|
if ( !keyFun )
|
||||||
|
{
|
||||||
|
MESSAGE("Could not find " << function_name << " from library");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
version = keyFun();
|
||||||
|
}
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
|
||||||
//================================================================================
|
//================================================================================
|
||||||
/*!
|
/*!
|
||||||
* \brief Get MeshGems version from the keygen library and meshgems built-in functions
|
* \brief Get MeshGems version from the keygen library or meshgems built-in functions
|
||||||
* \param [out] error - return error description
|
* \param [out] error - return error description
|
||||||
* \return int - the version
|
* \return int - the version
|
||||||
*/
|
*/
|
||||||
//================================================================================
|
//================================================================================
|
||||||
int GetMGVersionHex(std::string& error)
|
int GetMGVersionHex(std::string& error)
|
||||||
{
|
{
|
||||||
// get minor version
|
// load mgkeygen library
|
||||||
int v_min = -1;
|
int v_min = -1;
|
||||||
LibraryFile libraryFile;
|
LibraryFile libraryFile;
|
||||||
if ( !loadLibrary( error, libraryFile ))
|
if ( !loadLibrary( error, libraryFile ))
|
||||||
return v_min;
|
return v_min;
|
||||||
|
MESSAGE("Extracting MeshGems version");
|
||||||
|
|
||||||
typedef int (*GetKeyFun)();
|
// get minor version
|
||||||
GetKeyFun keyFun = (GetKeyFun) GetProc( theLibraryHandle, "meshgems_core_get_version_minor" );
|
v_min = GetMGVersionFromFunction("meshgems_core_get_version_minor");
|
||||||
if ( !keyFun )
|
if (v_min == -1)
|
||||||
{
|
v_min = GetMGVersionFromFunction("GetVersionMinor");
|
||||||
if ( ! getLastError( error ))
|
if (v_min == -1)
|
||||||
error = SMESH_Comment( "Can't find symbol 'meshgems_core_get_version_minor' in '") << getenv( theEnvVar ) << "'";
|
v_min = GetMGVersionFromEnv("MESHGEMS_VERSION_MINOR");
|
||||||
}
|
if (v_min == -1)
|
||||||
else
|
error = "could not retrieve minor version (located in '" + libraryFile._name + "')";
|
||||||
{
|
MESSAGE("MeshGems minor version = " << v_min);
|
||||||
v_min = keyFun( );
|
|
||||||
}
|
|
||||||
if ( v_min==-1 )
|
|
||||||
error = "meshgems_core_get_version_minor() failed (located in '" + libraryFile._name + "')";
|
|
||||||
|
|
||||||
MESSAGE("meshgems_core_get_version_minor: " << v_min);
|
|
||||||
|
|
||||||
// get major version
|
// get major version
|
||||||
int v_maj = -1;
|
int v_maj = GetMGVersionFromFunction("meshgems_core_get_version_major");
|
||||||
|
if (v_maj == -1)
|
||||||
typedef int (*GetKeyFun)();
|
v_maj = GetMGVersionFromFunction("GetVersionMajor");
|
||||||
keyFun = (GetKeyFun) GetProc( theLibraryHandle, "meshgems_core_get_version_major" );
|
if (v_maj == -1)
|
||||||
if ( !keyFun )
|
v_maj = GetMGVersionFromEnv("MESHGEMS_VERSION_MAJOR");
|
||||||
{
|
if (v_maj == -1)
|
||||||
if ( ! getLastError( error ))
|
error = "could not retrieve major version (located in '" + libraryFile._name + "')";
|
||||||
error = SMESH_Comment( "Can't find symbol 'meshgems_core_get_version_major' in '") << getenv( theEnvVar ) << "'";
|
MESSAGE("MeshGems major version = " << v_maj);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
v_maj = keyFun( );
|
|
||||||
}
|
|
||||||
if ( v_maj==-1 )
|
|
||||||
error = "meshgems_core_get_version_major() failed (located in '" + libraryFile._name + "')";
|
|
||||||
|
|
||||||
MESSAGE("meshgems_core_get_version_major: " << v_maj);
|
|
||||||
|
|
||||||
// get patch version
|
// get patch version
|
||||||
int v_patch = -1;
|
int v_patch = GetMGVersionFromFunction("meshgems_core_get_version_patch");
|
||||||
|
if (v_patch == -1)
|
||||||
typedef int (*GetKeyFun)();
|
v_patch = GetMGVersionFromFunction("GetVersionPatch");
|
||||||
keyFun = (GetKeyFun) GetProc( theLibraryHandle, "meshgems_core_get_version_patch" );
|
if (v_patch == -1)
|
||||||
if ( !keyFun )
|
v_patch = GetMGVersionFromEnv("MESHGEMS_VERSION_PATCH");
|
||||||
{
|
if (v_patch == -1)
|
||||||
if ( ! getLastError( error ))
|
error = "could not retrieve patch version (located in '" + libraryFile._name + "')";
|
||||||
error = SMESH_Comment( "Can't find symbol 'meshgems_core_get_version_patch' in '") << getenv( theEnvVar ) << "'";
|
MESSAGE("MeshGems patch version = " << v_patch);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
v_patch = keyFun( );
|
|
||||||
}
|
|
||||||
if ( v_patch==-1 )
|
|
||||||
error = "meshgems_core_get_version_patch() failed (located in '" + libraryFile._name + "')";
|
|
||||||
|
|
||||||
MESSAGE("meshgems_core_get_version_patch: " << v_patch );
|
|
||||||
|
|
||||||
int v_hex = (v_maj << 16 | v_min << 8 | v_patch);
|
int v_hex = (v_maj << 16 | v_min << 8 | v_patch);
|
||||||
|
|
||||||
MESSAGE("v_hex: " << v_hex);
|
MESSAGE("v_hex: " << v_hex);
|
||||||
|
|
||||||
return v_hex;
|
return v_hex;
|
||||||
@ -766,37 +783,37 @@ namespace SMESHUtils_MGLicenseKeyGen // API implementation
|
|||||||
*/
|
*/
|
||||||
//================================================================================
|
//================================================================================
|
||||||
std::string GetKey(const std::string& gmfFile,
|
std::string GetKey(const std::string& gmfFile,
|
||||||
int nbVertex,
|
int nbVertex,
|
||||||
int nbEdge,
|
int nbEdge,
|
||||||
int nbFace,
|
int nbFace,
|
||||||
int nbVol,
|
int nbVol,
|
||||||
std::string& error)
|
std::string& error)
|
||||||
{
|
{
|
||||||
// default key if MESHGEMS_OLD_STYLE or SPATIAL_LICENSE is set
|
// default key if MESHGEMS_OLD_STYLE or SPATIAL_LICENSE is set
|
||||||
std::string key("0");
|
std::string key("0");
|
||||||
const char *meshGemsOldStyleEnvVar( getenv( MESHGEMS_OLD_STYLE ) );
|
const char *meshGemsOldStyleEnvVar( getenv( MESHGEMS_OLD_STYLE ) );
|
||||||
if ( !meshGemsOldStyleEnvVar || strlen(meshGemsOldStyleEnvVar) == 0 )
|
if ( !meshGemsOldStyleEnvVar || strlen(meshGemsOldStyleEnvVar) == 0 )
|
||||||
|
{
|
||||||
|
const char *spatialLicenseEnvVar( getenv( SPATIAL_LICENSE ) );
|
||||||
|
if ( !spatialLicenseEnvVar || strlen(spatialLicenseEnvVar) == 0 )
|
||||||
{
|
{
|
||||||
const char *spatialLicenseEnvVar( getenv( SPATIAL_LICENSE ) );
|
if (NeedsMGSpatialEnvLicense(error))
|
||||||
if ( !spatialLicenseEnvVar || strlen(spatialLicenseEnvVar) == 0 )
|
{
|
||||||
{
|
// if MG version > 2.15, set environment license, don't return it as a key
|
||||||
if (NeedsMGSpatialEnvLicense(error))
|
// otherwise it will be printed in the command line
|
||||||
{
|
MESSAGE("SPATIAL_LICENSE not in env => we add it from MGKeygen .so");
|
||||||
// if MG version > 2.15, set environment license, don't return it as a key
|
SetMGSpatialEnvLicense(error);
|
||||||
// otherwise it will be printed in the command line
|
}
|
||||||
MESSAGE("SPATIAL_LICENSE not in env => we add it from MGKeygen .so");
|
else
|
||||||
SetMGSpatialEnvLicense(error);
|
{
|
||||||
}
|
// generate the key from the mesh info (MG 2.13 and 2.14)
|
||||||
else
|
MESSAGE("MG < 2.15 => get the key from MGKeygen .so and this mesh info");
|
||||||
{
|
key = GetKey_After(gmfFile,nbVertex,nbEdge,nbFace,nbVol,error);
|
||||||
// generate the key from the mesh info (MG 2.13 and 2.14)
|
}
|
||||||
MESSAGE("MG < 2.15 => get the key from MGKeygen .so and this mesh info");
|
|
||||||
key = GetKey_After(gmfFile,nbVertex,nbEdge,nbFace,nbVol,error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
MESSAGE("SPATIAL_LICENSE already in env => we use it");
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
MESSAGE("SPATIAL_LICENSE already in env => we use it");
|
||||||
|
}
|
||||||
if (! error.empty())
|
if (! error.empty())
|
||||||
std::cerr << error;
|
std::cerr << error;
|
||||||
return key;
|
return key;
|
||||||
@ -819,16 +836,16 @@ namespace SMESHUtils_MGLicenseKeyGen // API implementation
|
|||||||
if ( !meshGemsOldStyleEnvVar || strlen(meshGemsOldStyleEnvVar) == 0 ){
|
if ( !meshGemsOldStyleEnvVar || strlen(meshGemsOldStyleEnvVar) == 0 ){
|
||||||
const char *spatialLicenseEnvVar( getenv( SPATIAL_LICENSE ) );
|
const char *spatialLicenseEnvVar( getenv( SPATIAL_LICENSE ) );
|
||||||
if ( !spatialLicenseEnvVar || strlen(spatialLicenseEnvVar) == 0 )
|
if ( !spatialLicenseEnvVar || strlen(spatialLicenseEnvVar) == 0 )
|
||||||
{
|
{
|
||||||
MESSAGE("SPATIAL_LICENSE not in env => we add it from MGKeygen .so");
|
MESSAGE("SPATIAL_LICENSE not in env => we add it from MGKeygen .so");
|
||||||
// use new style, i.e. key in a library
|
// use new style, i.e. key in a library
|
||||||
key = GetKey_After(error);
|
key = GetKey_After(error);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
MESSAGE("SPATIAL_LICENSE already in env => we use it");
|
MESSAGE("SPATIAL_LICENSE already in env => we use it");
|
||||||
key = std::string(spatialLicenseEnvVar);
|
key = std::string(spatialLicenseEnvVar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (! error.empty())
|
if (! error.empty())
|
||||||
std::cerr << error;
|
std::cerr << error;
|
||||||
|
@ -58,7 +58,8 @@ namespace SMESHUtils_MGLicenseKeyGen
|
|||||||
SMESHUtils_EXPORT bool CheckKeyGenLibrary( std::string& error );
|
SMESHUtils_EXPORT bool CheckKeyGenLibrary( std::string& error );
|
||||||
|
|
||||||
SMESHUtils_EXPORT std::string GetLibraryName();
|
SMESHUtils_EXPORT std::string GetLibraryName();
|
||||||
|
SMESHUtils_EXPORT int GetMGVersionFromFunction(const char* function_name);
|
||||||
|
SMESHUtils_EXPORT int GetMGVersionFromEnv(const char* env_variable);
|
||||||
SMESHUtils_EXPORT int GetMGVersionHex(std::string& error);
|
SMESHUtils_EXPORT int GetMGVersionHex(std::string& error);
|
||||||
SMESHUtils_EXPORT bool NeedsMGSpatialEnvLicense(std::string& error);
|
SMESHUtils_EXPORT bool NeedsMGSpatialEnvLicense(std::string& error);
|
||||||
SMESHUtils_EXPORT bool SetMGSpatialEnvLicense(std::string& error);
|
SMESHUtils_EXPORT bool SetMGSpatialEnvLicense(std::string& error);
|
||||||
|
Loading…
Reference in New Issue
Block a user