Commit 84bde947 authored by Brad King's avatar Brad King

ENH: Added DLL support.

parent a5e571ea
......@@ -17,11 +17,14 @@
#ifndef @KWSYS_NAMESPACE@_Base64_h
#define @KWSYS_NAMESPACE@_Base64_h
#include <@KWSYS_NAMESPACE@/Configure.h>
/* Redefine all public interface symbol names to be in the proper
namespace. These macros are used internally to kwsys only, and are
not visible to user code. Use kwsysHeaderDump.pl to reproduce
these macros after making changes to the interface. */
#define kwsys(x) @KWSYS_NAMESPACE@##x
#define kwsysEXPORT kwsys(_EXPORT)
#define kwsysBase64 kwsys(Base64)
#define kwsysBase64_Decode kwsys(Base64_Decode)
#define kwsysBase64_Decode3 kwsys(Base64_Decode3)
......@@ -38,17 +41,20 @@ extern "C"
/**
* Encode 3 bytes into a 4 byte string.
*/
void kwsysBase64_Encode3(const unsigned char *src, unsigned char *dest);
kwsysEXPORT void kwsysBase64_Encode3(const unsigned char *src,
unsigned char *dest);
/**
* Encode 2 bytes into a 4 byte string.
*/
void kwsysBase64_Encode2(const unsigned char *src, unsigned char *dest);
kwsysEXPORT void kwsysBase64_Encode2(const unsigned char *src,
unsigned char *dest);
/**
* Encode 1 bytes into a 4 byte string.
*/
void kwsysBase64_Encode1(const unsigned char *src, unsigned char *dest);
kwsysEXPORT void kwsysBase64_Encode1(const unsigned char *src,
unsigned char *dest);
/**
* Encode 'length' bytes from the input buffer and store the encoded
......@@ -63,16 +69,17 @@ void kwsysBase64_Encode1(const unsigned char *src, unsigned char *dest);
* the extra padding needed to complete the encode 4 bytes will stop
* the decoding anyway).
*/
unsigned long kwsysBase64_Encode(const unsigned char *input,
unsigned long length,
unsigned char *output,
int mark_end);
kwsysEXPORT unsigned long kwsysBase64_Encode(const unsigned char *input,
unsigned long length,
unsigned char *output,
int mark_end);
/**
* Decode 4 bytes into a 3 byte string. Returns the number of bytes
* actually decoded.
*/
int kwsysBase64_Decode3(const unsigned char *src, unsigned char *dest);
kwsysEXPORT int kwsysBase64_Decode3(const unsigned char *src,
unsigned char *dest);
/**
* Decode bytes from the input buffer and store the decoded stream
......@@ -86,10 +93,10 @@ int kwsysBase64_Decode3(const unsigned char *src, unsigned char *dest);
* much decoded data to expect (of course, the buffer must be large
* enough).
*/
unsigned long kwsysBase64_Decode(const unsigned char *input,
unsigned long length,
unsigned char *output,
unsigned long max_input_length);
kwsysEXPORT unsigned long kwsysBase64_Decode(const unsigned char *input,
unsigned long length,
unsigned char *output,
unsigned long max_input_length);
#if defined(__cplusplus)
} /* extern "C" */
......@@ -99,6 +106,7 @@ unsigned long kwsysBase64_Decode(const unsigned char *input,
undefine them to keep the namespace clean. */
#if !defined(KWSYS_IN_BASE64_C)
# undef kwsys
# undef kwsysEXPORT
# undef kwsysBase64
# undef kwsysBase64_Decode
# undef kwsysBase64_Decode3
......
......@@ -147,6 +147,19 @@ SET(KWSYS_NO_STD_NAMESPACE ${CMAKE_NO_STD_NAMESPACE})
SET(KWSYS_NO_ANSI_STREAM_HEADERS ${CMAKE_NO_ANSI_STREAM_HEADERS})
SET(KWSYS_NO_ANSI_STRING_STREAM ${CMAKE_NO_ANSI_STRING_STREAM})
# Choose default shared/static build if not specified.
IF(KWSYS_BUILD_SHARED MATCHES "^KWSYS_BUILD_SHARED$")
SET(KWSYS_BUILD_SHARED ${BUILD_SHARED_LIBS})
ENDIF(KWSYS_BUILD_SHARED MATCHES "^KWSYS_BUILD_SHARED$")
IF(KWSYS_BUILD_SHARED)
SET(KWSYS_BUILD_SHARED 1)
SET(KWSYS_LIBRARY_TYPE SHARED)
ELSE(KWSYS_BUILD_SHARED)
SET(KWSYS_BUILD_SHARED 0)
SET(KWSYS_LIBRARY_TYPE STATIC)
ENDIF(KWSYS_BUILD_SHARED)
#-----------------------------------------------------------------------------
# Choose a directory for the generated headers.
IF(NOT KWSYS_HEADER_ROOT)
......@@ -192,7 +205,7 @@ ENDFOREACH(header)
# Build a list of classes and headers we need to implement the
# selected components. Initialize with required components.
SET(KWSYS_CLASSES)
SET(KWSYS_H_FILES)
SET(KWSYS_H_FILES Configure)
SET(KWSYS_HXX_FILES Configure)
# Enforce component dependencies (none currently exists).
......@@ -283,7 +296,7 @@ ENDFOREACH(h)
#-----------------------------------------------------------------------------
# Add the library with the configured name and list of sources.
ADD_LIBRARY(${KWSYS_NAMESPACE} ${KWSYS_SRCS})
ADD_LIBRARY(${KWSYS_NAMESPACE} ${KWSYS_LIBRARY_TYPE} ${KWSYS_SRCS})
# Create an install target for the library.
IF(KWSYS_LIBRARY_INSTALL_DIR)
......
/*=========================================================================
Program: KWSys - Kitware System Library
Module: Configure.h.in
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
See http://www.cmake.org/HTML/Copyright.html for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef @KWSYS_NAMESPACE@_Configure_h
#define @KWSYS_NAMESPACE@_Configure_h
#if defined(_WIN32) && @KWSYS_BUILD_SHARED@
# if defined(@KWSYS_NAMESPACE@_EXPORTS)
# define @KWSYS_NAMESPACE@_EXPORT __declspec(dllexport)
# else
# define @KWSYS_NAMESPACE@_EXPORT __declspec(dllexport)
# endif
#else
# define @KWSYS_NAMESPACE@_EXPORT
#endif
#endif
......@@ -16,6 +16,8 @@
=========================================================================*/
#include <Directory.hxx>
#include <Configure.hxx>
#include <std/string>
#include <std/vector>
......
......@@ -17,7 +17,7 @@
#ifndef @KWSYS_NAMESPACE@_Directory_hxx
#define @KWSYS_NAMESPACE@_Directory_hxx
#include <@KWSYS_NAMESPACE@/Configure.hxx>
#include <@KWSYS_NAMESPACE@/Configure.h>
namespace @KWSYS_NAMESPACE@
{
......@@ -32,7 +32,7 @@ class DirectoryInternals;
*
* Directory currently works with Windows and Unix operating systems.
*/
class Directory
class @KWSYS_NAMESPACE@_EXPORT Directory
{
public:
Directory();
......
......@@ -50,6 +50,7 @@ int main(int argc, char* argv[])
/* Prepend header comment. */
fprintf(ofp, "/*\n * DO NOT EDIT\n * This file is generated by:\n");
fprintf(ofp, " * %s\n */\n\n", argv[0]);
fprintf(ofp, "#include <Configure.h>\n\n");
fprintf(ofp, "#include <stdio.h>\n\n");
/* Split file up in 1024-byte chunks. */
......@@ -74,8 +75,8 @@ int main(int argc, char* argv[])
fclose(ifp);
/* Provide a function to write the data to a file. */
fprintf(ofp, "extern int %sEncodedWriteArray%s(const char* fname)\n",
argv[3], argv[4]);
fprintf(ofp, "extern %s_EXPORT int %sEncodedWriteArray%s(const char* fname)\n",
argv[3], argv[3], argv[4]);
fprintf(ofp, "{\n");
fprintf(ofp, " FILE* ofp = fopen(fname, \"wb\");\n");
fprintf(ofp, " if(!ofp) { return 0; }\n");
......
......@@ -17,11 +17,14 @@
#ifndef @KWSYS_NAMESPACE@_Process_h
#define @KWSYS_NAMESPACE@_Process_h
#include <@KWSYS_NAMESPACE@/Configure.h>
/* Redefine all public interface symbol names to be in the proper
namespace. These macros are used internally to kwsys only, and are
not visible to user code. Use kwsysHeaderDump.pl to reproduce
these macros after making changes to the interface. */
#define kwsys(x) @KWSYS_NAMESPACE@##x
#define kwsysEXPORT kwsys(_EXPORT)
#define kwsysProcess kwsys(Process)
#define kwsysProcess_s kwsys(Process_s)
#define kwsysProcess_New kwsys(Process_New)
......@@ -70,20 +73,21 @@ typedef struct kwsysProcess_s kwsysProcess;
/**
* Create a new Process instance.
*/
kwsysProcess* kwsysProcess_New();
kwsysEXPORT kwsysProcess* kwsysProcess_New();
/**
* Delete an existing Process instance. If the instance is currently
* executing a process, this blocks until the process terminates.
*/
void kwsysProcess_Delete(kwsysProcess* cp);
kwsysEXPORT void kwsysProcess_Delete(kwsysProcess* cp);
/**
* Set the command line to be executed. Argument is an array of
* pointers to the command and each argument. Ths array must end with
* a NULL pointer.
*/
void kwsysProcess_SetCommand(kwsysProcess* cp, char const* const* command);
kwsysEXPORT void kwsysProcess_SetCommand(kwsysProcess* cp,
char const* const* command);
/**
* Set the timeout for the child process. The timeout period begins
......@@ -91,7 +95,7 @@ void kwsysProcess_SetCommand(kwsysProcess* cp, char const* const* command);
* the timeout expires, it will be killed. A non-positive (<= 0)
* value will disable the timeout.
*/
void kwsysProcess_SetTimeout(kwsysProcess* cp, double timeout);
kwsysEXPORT void kwsysProcess_SetTimeout(kwsysProcess* cp, double timeout);
/**
* Get the current state of the Process instance. Possible states are:
......@@ -104,7 +108,7 @@ void kwsysProcess_SetTimeout(kwsysProcess* cp, double timeout);
* kwsysProcess_State_Expired = Child process's timeout expired.
* kwsysProcess_State_Killed = Child process terminated by Kill method.
*/
int kwsysProcess_GetState(kwsysProcess* cp);
kwsysEXPORT int kwsysProcess_GetState(kwsysProcess* cp);
enum kwsysProcess_State_e
{
kwsysProcess_State_Starting,
......@@ -128,7 +132,7 @@ enum kwsysProcess_State_e
* kwsysProcess_Exception_Numerical = Child crashed with a numerical exception.
* kwsysProcess_Exception_Other = Child terminated for another reason.
*/
int kwsysProcess_GetExitException(kwsysProcess* cp);
kwsysEXPORT int kwsysProcess_GetExitException(kwsysProcess* cp);
enum kwsysProcess_Exception_e
{
kwsysProcess_Exception_None,
......@@ -149,25 +153,25 @@ enum kwsysProcess_Exception_e
* If GetState returns "Exited", use GetExitValue to get the
* platform-independent child return value.
*/
int kwsysProcess_GetExitCode(kwsysProcess* cp);
kwsysEXPORT int kwsysProcess_GetExitCode(kwsysProcess* cp);
/**
* When GetState returns "Exited", this method returns the child's
* platform-independent exit code (such as the value returned by the
* child's main).
*/
int kwsysProcess_GetExitValue(kwsysProcess* cp);
kwsysEXPORT int kwsysProcess_GetExitValue(kwsysProcess* cp);
/**
* When GetState returns "Error", this method returns a string
* describing the problem. Otherwise, it returns NULL.
*/
const char* kwsysProcess_GetErrorString(kwsysProcess* cp);
kwsysEXPORT const char* kwsysProcess_GetErrorString(kwsysProcess* cp);
/**
* Start executing the child process.
*/
void kwsysProcess_Execute(kwsysProcess* cp);
kwsysEXPORT void kwsysProcess_Execute(kwsysProcess* cp);
/**
* Block until data are available on a requested pipe, a timeout
......@@ -198,8 +202,9 @@ void kwsysProcess_Execute(kwsysProcess* cp);
* call. Time elapsed has been subtracted from timeout
* argument.
*/
int kwsysProcess_WaitForData(kwsysProcess* cp, int pipes, char** data,
int* length, double* timeout);
kwsysEXPORT int kwsysProcess_WaitForData(kwsysProcess* cp, int pipes,
char** data, int* length,
double* timeout);
enum kwsysProcess_Pipes_e
{
kwsysProcess_Pipe_STDOUT=1,
......@@ -225,14 +230,14 @@ enum kwsysProcess_Pipes_e
* argument.
* 1 = Child has terminated or was not running.
*/
int kwsysProcess_WaitForExit(kwsysProcess* cp, double* timeout);
kwsysEXPORT int kwsysProcess_WaitForExit(kwsysProcess* cp, double* timeout);
/**
* Forcefully terminate the child process that is currently running.
* The caller should call WaitForExit after this returns to wait for
* the child to terminate.
*/
void kwsysProcess_Kill(kwsysProcess* cp);
kwsysEXPORT void kwsysProcess_Kill(kwsysProcess* cp);
#if defined(__cplusplus)
} /* extern "C" */
......@@ -242,6 +247,7 @@ void kwsysProcess_Kill(kwsysProcess* cp);
Otherwise, undefine them to keep the namespace clean. */
#if !defined(KWSYS_IN_PROCESS_C)
# undef kwsys
# undef kwsysEXPORT
# undef kwsysProcess
# undef kwsysProcess_s
# undef kwsysProcess_New
......
......@@ -51,7 +51,7 @@ Q190351 and Q150956.
/* The maximum amount to read from a pipe at a time. */
#define CMPE_PIPE_BUFFER_SIZE 1024
#define kwsysEncodedWriteArrayProcessFwd kwsys(EncodedWriteArrayProcessFwd)
#define kwsysEncodedWriteArrayProcessFwd9x kwsys(EncodedWriteArrayProcessFwd9x)
typedef LARGE_INTEGER kwsysProcessTime;
......@@ -72,7 +72,7 @@ static kwsysProcessTime kwsysProcessTimeFromDouble(double d);
static int kwsysProcessTimeLess(kwsysProcessTime in1, kwsysProcessTime in2);
static kwsysProcessTime kwsysProcessTimeAdd(kwsysProcessTime in1, kwsysProcessTime in2);
static kwsysProcessTime kwsysProcessTimeSubtract(kwsysProcessTime in1, kwsysProcessTime in2);
extern int kwsysEncodedWriteArrayProcessFwd9x(const char* fname);
extern kwsysEXPORT int kwsysEncodedWriteArrayProcessFwd9x(const char* fname);
/*--------------------------------------------------------------------------*/
/* A structure containing data for each pipe's thread. */
......
......@@ -413,7 +413,7 @@ static char* reg (int paren, int *flagp) {
// Make an OPEN node, if parenthesized.
if (paren) {
if (regnpar >= RegularExpressionNSUBEXP) {
if (regnpar >= RegularExpression::NSUBEXP) {
//RAISE Error, SYM(RegularExpression), SYM(Too_Many_Parens),
printf ("RegularExpression::compile(): Too many parentheses.\n");
return 0;
......@@ -925,7 +925,7 @@ static int regtry (const char* string, const char* *start,
sp1 = start;
ep = end;
for (i = RegularExpressionNSUBEXP; i > 0; i--) {
for (i = RegularExpression::NSUBEXP; i > 0; i--) {
*sp1++ = 0;
*ep++ = 0;
}
......
......@@ -35,6 +35,7 @@
#ifndef @KWSYS_NAMESPACE@_RegularExpression_hxx
#define @KWSYS_NAMESPACE@_RegularExpression_hxx
#include <@KWSYS_NAMESPACE@/Configure.h>
#include <@KWSYS_NAMESPACE@/Configure.hxx>
#include <@KWSYS_NAMESPACE@/std/string>
......@@ -47,8 +48,6 @@
namespace @KWSYS_NAMESPACE@
{
const int RegularExpressionNSUBEXP = 10;
/** \class RegularExpression
* \brief Implements pattern matching with regular expressions.
*
......@@ -186,7 +185,7 @@ const int RegularExpressionNSUBEXP = 10;
* the line. It would match "drepa qrepb" in "rep drepa qrepb".
*
*/
class RegularExpression
class @KWSYS_NAMESPACE@_EXPORT RegularExpression
{
public:
/**
......@@ -273,9 +272,10 @@ public:
kwsys_std::string::size_type end(int n) const;
kwsys_std::string match(int n) const;
enum { NSUBEXP = 10 };
private:
const char* startp[RegularExpressionNSUBEXP];
const char* endp[RegularExpressionNSUBEXP];
const char* startp[NSUBEXP];
const char* endp[NSUBEXP];
char regstart; // Internal use only
char reganch; // Internal use only
const char* regmust; // Internal use only
......
......@@ -21,6 +21,8 @@
#include <@KWSYS_NAMESPACE@/std/string>
#include <@KWSYS_NAMESPACE@/std/vector>
#include <@KWSYS_NAMESPACE@/Configure.h>
/* Define this macro temporarily to keep the code readable. */
#if !defined (KWSYS_NAMESPACE) && !defined(@KWSYS_NAMESPACE@_NAME_IS_KWSYS)
# define kwsys_std @KWSYS_NAMESPACE@_std
......@@ -32,7 +34,7 @@ namespace @KWSYS_NAMESPACE@
/** \class SystemTools
* \brief A collection of useful platform-independent system functions.
*/
class SystemTools
class @KWSYS_NAMESPACE@_EXPORT SystemTools
{
public:
/**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment