prvrsion.h

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- *//* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is the Netscape Portable Runtime (NSPR). * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1998-2000 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** *//* author: jstewart */#if defined(_PRVERSION_H)#else#define _PRVERSION_H#include "prtypes.h"
PR_BEGIN_EXTERN_C
/* All components participating in the PR version protocol must expose * a structure and a function. The structure is defined below and named * according to the naming conventions outlined further below. The function * is called libVersionPoint and returns a pointer to this structure. *//* on NT, always pack the structure the same. */#ifdef _WIN32#pragma pack(push, 8)#endiftypedefstruct {
/* * The first field defines which version of this structure is in use. * At this time, only version 2 is specified. If this value is not * 2, you must read no further into the structure. */
PRInt32 version;
/* for Version 2, this is the body format. */
PRInt64 buildTime; /* 64 bits - usecs since midnight, 1/1/1970 */char * buildTimeString;/* a human readable version of the time */
PRUint8 vMajor; /* Major version of this component */
PRUint8 vMinor; /* Minor version of this component */
PRUint8 vPatch; /* Patch level of this component */
PRBool beta; /* true if this is a beta component */
PRBool debug; /* true if this is a debug component */
PRBool special; /* true if this component is a special build */char * filename; /* The original filename */char * description; /* description of this component */char * security; /* level of security in this component */char * copyright; /* The copyright for this file */char * comment; /* free form field for misc usage */char * specialString; /* the special variant for this build */
} PRVersionDescription;
/* on NT, restore the previous packing */#ifdef _WIN32#pragma pack(pop)#endif/* * All components must define an entrypoint named libVersionPoint which * is of type versionEntryPointType. * * For example, for a library named libfoo, we would have: * * PRVersionDescription prVersionDescription_libfoo = * { * ... * }; * * PR_IMPLEMENT(const PRVersionDescription*) libVersionPoint(void) * { * return &prVersionDescription_libfoo; * } */typedefconst PRVersionDescription *(*versionEntryPointType)(void);
/* * Where you declare your libVersionPoint, do it like this: * PR_IMPLEMENT(const PRVersionDescription *) libVersionPoint(void) { * fill it in... * } *//* * NAMING CONVENTION FOR struct * * all components should also expose a static PRVersionDescription * The name of the struct should be calculated as follows: * Take the value of filename. (If filename is not specified, calculate * a short, unique string.) Convert all non-alphanumeric characters * to '_'. To this, prepend "PRVersionDescription_". Thus for libfoo.so, * the symbol name is "PRVersionDescription_libfoo_so". * so the file should have * PRVersionDescription PRVersionDescription_libfoo_so { fill it in }; * on NT, this file should be declspec export. */
PR_END_EXTERN_C
#endif /* defined(_PRVERSION_H) *//* prvrsion.h */