From 96cd8620b09cf862585c5d4cd14b541d1e45ee75 Mon Sep 17 00:00:00 2001
From: Brad King <brad.king@kitware.com>
Date: Thu, 10 Jul 2003 14:32:30 -0400
Subject: [PATCH] ENH: Added use of KWSYS_HEADER macro in c and cxx files to
 include kwsys headers through their configured namespace.

---
 Base64.c              |  3 ++-
 CMakeLists.txt        |  5 +----
 Directory.cxx         |  9 +++++----
 EncodeExecutable.c    |  3 ++-
 ProcessUNIX.c         |  3 ++-
 ProcessWin32.c        |  3 ++-
 RegularExpression.cxx |  4 +++-
 SystemTools.cxx       |  7 ++++---
 kwsysPrivate.h        | 38 ++++++++++++++++++++++++++++++++++++++
 9 files changed, 59 insertions(+), 16 deletions(-)
 create mode 100644 kwsysPrivate.h

diff --git a/Base64.c b/Base64.c
index 521109f7..8eae0a7a 100644
--- a/Base64.c
+++ b/Base64.c
@@ -15,7 +15,8 @@ PURPOSE.  See the above copyright notices for more information.
 
 =========================================================================*/
 #define KWSYS_IN_BASE64_C
-#include <Base64.h>
+#include "kwsysPrivate.h"
+#include KWSYS_HEADER(Base64.h)
 
 /*--------------------------------------------------------------------------*/
 static const unsigned char kwsysBase64EncodeTable[65] =
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2280839b..8967bb7e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -304,11 +304,8 @@ IF(KWSYS_LIBRARY_INSTALL_DIR)
 ENDIF(KWSYS_LIBRARY_INSTALL_DIR)
 
 # For building kwsys itself, we use a macro defined on the command
-# line to configure the namespace in the C and C++ source files.  The
-# source files must also include their headers without the namespae
-# prefix, so we add the header directory to the include path directly.
+# line to configure the namespace in the C and C++ source files.
 ADD_DEFINITIONS("-DKWSYS_NAMESPACE=${KWSYS_NAMESPACE}")
-INCLUDE_DIRECTORIES(BEFORE ${KWSYS_HEADER_DIR})
 
 #-----------------------------------------------------------------------------
 # Process execution on windows needs to build a forwarding executable
diff --git a/Directory.cxx b/Directory.cxx
index 8d2d08fa..d6959406 100644
--- a/Directory.cxx
+++ b/Directory.cxx
@@ -14,12 +14,13 @@
      PURPOSE.  See the above copyright notices for more information.
 
 =========================================================================*/
-#include <Directory.hxx>
+#include "kwsysPrivate.h"
+#include KWSYS_HEADER(Directory.hxx)
 
-#include <Configure.hxx>
+#include KWSYS_HEADER(Configure.hxx)
 
-#include <std/string>
-#include <std/vector>
+#include KWSYS_HEADER(std/string)
+#include KWSYS_HEADER(std/vector)
 
 namespace KWSYS_NAMESPACE
 {
diff --git a/EncodeExecutable.c b/EncodeExecutable.c
index fd597956..ef85759a 100644
--- a/EncodeExecutable.c
+++ b/EncodeExecutable.c
@@ -50,7 +50,8 @@ 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 \"kwsysPrivate.h\"\n");
+  fprintf(ofp, "#include KWSYS_HEADER(Configure.h)\n\n");
   fprintf(ofp, "#include <stdio.h>\n\n");
   
   /* Split file up in 1024-byte chunks.  */
diff --git a/ProcessUNIX.c b/ProcessUNIX.c
index b00f6483..678fbecb 100644
--- a/ProcessUNIX.c
+++ b/ProcessUNIX.c
@@ -15,7 +15,8 @@ PURPOSE.  See the above copyright notices for more information.
 
 =========================================================================*/
 #define KWSYS_IN_PROCESS_C
-#include <Process.h>
+#include "kwsysPrivate.h"
+#include KWSYS_HEADER(Process.h)
 
 /*
 
diff --git a/ProcessWin32.c b/ProcessWin32.c
index 5d5c680a..8321efeb 100644
--- a/ProcessWin32.c
+++ b/ProcessWin32.c
@@ -15,7 +15,8 @@ PURPOSE.  See the above copyright notices for more information.
 
 =========================================================================*/
 #define KWSYS_IN_PROCESS_C
-#include <Process.h>
+#include "kwsysPrivate.h"
+#include KWSYS_HEADER(Process.h)
 
 /*
 
diff --git a/RegularExpression.cxx b/RegularExpression.cxx
index 6c0a626f..010b38a7 100644
--- a/RegularExpression.cxx
+++ b/RegularExpression.cxx
@@ -33,7 +33,9 @@
 // Updated: DLS 03/22/91  New lite version
 //
 
-#include <RegularExpression.hxx>        // Include class specification 
+#include "kwsysPrivate.h"
+#include KWSYS_HEADER(RegularExpression.hxx)
+
 #include <stdio.h>
 
 namespace KWSYS_NAMESPACE
diff --git a/SystemTools.cxx b/SystemTools.cxx
index 030859da..fb6901f9 100644
--- a/SystemTools.cxx
+++ b/SystemTools.cxx
@@ -14,10 +14,11 @@
      PURPOSE.  See the above copyright notices for more information.
 
 =========================================================================*/
-#include <SystemTools.hxx>
+#include "kwsysPrivate.h"
+#include KWSYS_HEADER(SystemTools.hxx)
 
-#include <std/iostream>
-#include <std/fstream>
+#include KWSYS_HEADER(std/iostream)
+#include KWSYS_HEADER(std/fstream)
 
 #ifdef _MSC_VER
 # pragma warning (disable: 4786)
diff --git a/kwsysPrivate.h b/kwsysPrivate.h
new file mode 100644
index 00000000..33598969
--- /dev/null
+++ b/kwsysPrivate.h
@@ -0,0 +1,38 @@
+/*=========================================================================
+
+  Program:   KWSys - Kitware System Library
+  Module:    kwsysPrivate.h
+  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
+# error "Do not include kwsysPrivate.h outside of kwsys c and cxx files."
+#endif
+
+#ifndef _kwsysPrivate_h
+#define _kwsysPrivate_h
+
+/*
+  Define KWSYS_HEADER macro to help the c and cxx files include kwsys
+  headers from the configured namespace directory.  The macro can be
+  used like this:
+  
+  #include KWSYS_HEADER(Directory.hxx)
+  #include KWSYS_HEADER(std/vector)
+*/
+#define KWSYS_HEADER(x) KWSYS_HEADER0(KWSYS_NAMESPACE/x)
+#define KWSYS_HEADER0(x) KWSYS_HEADER1(x)
+#define KWSYS_HEADER1(x) <x>
+
+#else
+# error "kwsysPrivate.h included multiple times."
+#endif
-- 
GitLab