Commit dc3fd5c2 authored by Brad King's avatar Brad King

ENH: Merged use of kwsys library.

parent c5890b8c
......@@ -29,6 +29,15 @@ IF(CMAKE_SYSTEM MATCHES "OSF1-V.*")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -timplicit_local -no_implicit_include ")
ENDIF(NOT CMAKE_COMPILER_IS_GNUCXX)
ENDIF(CMAKE_SYSTEM MATCHES "OSF1-V.*")
#-----------------------------------------------------------------------------
# Create the kwsys library for CMake.
SET(KWSYS_NAMESPACE cmsys)
SET(KWSYS_USE_SystemTools 1)
SET(KWSYS_USE_Directory 1)
SET(KWSYS_HEADER_ROOT ${CMake_BINARY_DIR}/Source)
SUBDIRS(Source/kwsys)
SUBDIRS(Source Modules Templates Utilities)
ENABLE_TESTING()
......
......@@ -8,7 +8,6 @@ cmMakefile.cxx
cmRegularExpression.cxx
cmSourceFile.cxx
cmSystemTools.cxx
cmDirectory.cxx
cmDocumentation.cxx
cmDynamicLoader.cxx
cmCommands.cxx
......@@ -30,7 +29,6 @@ cmRegularExpression.h
cmSourceFile.h
cmSystemTools.h
cmDynamicLoader.h
cmDirectory.h
cmCommands.h
cmTarget.h
cmCustomCommand.h
......@@ -96,6 +94,7 @@ ENDIF (WIN32)
# create a library used by the command line and the GUI
ADD_LIBRARY(CMakeLib ${SRCS})
TARGET_LINK_LIBRARIES(CMakeLib cmsys)
# always link in the library
# the library is found here
......
......@@ -18,7 +18,6 @@
#include "cmCursesMainForm.h"
#include "cmSystemTools.h"
#include "cmDirectory.h"
cmCursesPathWidget::cmCursesPathWidget(int width, int height,
int left, int top) :
......
......@@ -15,9 +15,10 @@
=========================================================================*/
#include "cmAuxSourceDirectoryCommand.h"
#include "cmDirectory.h"
#include "cmSourceFile.h"
#include <cmsys/Directory.hxx>
// cmAuxSourceDirectoryCommand
bool cmAuxSourceDirectoryCommand::InitialPass(std::vector<std::string> const& args)
{
......@@ -42,7 +43,7 @@ bool cmAuxSourceDirectoryCommand::InitialPass(std::vector<std::string> const& ar
}
// Load all the files in the directory
cmDirectory dir;
cmsys::Directory dir;
if(dir.Load(tdir.c_str()))
{
size_t numfiles = dir.GetNumberOfFiles();
......
/*=========================================================================
Program: CMake - Cross-Platform Makefile Generator
Module: $RCSfile$
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
See Copyright.txt or 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.
=========================================================================*/
#include "cmDirectory.h"
// First microsoft compilers
#ifdef _MSC_VER
#include <windows.h>
#include <io.h>
#include <ctype.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
/**
*
*/
bool
cmDirectory
::Load(const char* name)
{
char* buf;
size_t n = strlen(name);
if ( name[n - 1] == '/' )
{
buf = new char[n + 1 + 1];
sprintf(buf, "%s*", name);
}
else
{
buf = new char[n + 2 + 1];
sprintf(buf, "%s/*", name);
}
struct _finddata_t data; // data of current file
// Now put them into the file array
size_t srchHandle = _findfirst(buf, &data);
delete [] buf;
if ( srchHandle == -1 )
{
return 0;
}
// Loop through names
do
{
m_Files.push_back(data.name);
}
while ( _findnext(srchHandle, &data) != -1 );
m_Path = name;
return _findclose(srchHandle) != -1;
}
#else
// Now the POSIX style directory access
#include <sys/types.h>
#include <dirent.h>
/**
*
*/
bool
cmDirectory
::Load(const char* name)
{
DIR* dir = opendir(name);
if (!dir)
{
return 0;
}
for (dirent* d = readdir(dir); d; d = readdir(dir) )
{
m_Files.push_back(d->d_name);
}
m_Path = name;
closedir(dir);
return 1;
}
#endif
/**
*
*/
const char*
cmDirectory
::GetFile(size_t dindex)
{
if ( dindex >= m_Files.size() )
{
cmSystemTools::Error("Bad index for GetFile on cmDirectory\n", 0);
return 0;
}
return m_Files[dindex].c_str();
}
/*=========================================================================
Program: CMake - Cross-Platform Makefile Generator
Module: $RCSfile$
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
See Copyright.txt or 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 __cmDirectory_h
#define __cmDirectory_h
#include "cmStandardIncludes.h"
#include "cmSystemTools.h"
/** \class cmDirectory
* \brief Portable directory/filename traversal.
*
* cmDirectory provides a portable way of finding the names of the files
* in a system directory.
*
* cmDirectory currently works with Windows and Unix operating systems.
*/
class cmDirectory
{
public:
/**
* Load the specified directory and load the names of the files
* in that directory. 0 is returned if the directory can not be
* opened, 1 if it is opened.
*/
bool Load(const char* dir);
/**
* Return the number of files in the current directory.
*/
size_t GetNumberOfFiles() { return m_Files.size();}
/**
* Return the file at the given index, the indexing is 0 based
*/
const char* GetFile(size_t );
private:
std::vector<std::string> m_Files; // Array of Files
std::string m_Path; // Path to Open'ed directory
}; // End Class: cmDirectory
#endif
......@@ -15,7 +15,6 @@
=========================================================================*/
#include "cmMakeDirectoryCommand.h"
#include "cmDirectory.h"
// cmMakeDirectoryCommand
bool cmMakeDirectoryCommand::InitialPass(std::vector<std::string> const& args)
......
......@@ -18,7 +18,6 @@
#include "cmCommand.h"
#include "cmStandardIncludes.h"
#include "cmSourceFile.h"
#include "cmDirectory.h"
#include "cmSystemTools.h"
#include "cmGlobalGenerator.h"
#include "cmLocalGenerator.h"
......
This diff is collapsed.
This diff is collapsed.
......@@ -18,6 +18,8 @@
#include "cmCacheManager.h"
#include "cmListFileCache.h"
#include <cmsys/Directory.hxx>
int cmTryCompileCommand::CoreTryCompileCode(
cmMakefile *mf, std::vector<std::string> const& argv, bool clean)
{
......@@ -263,7 +265,7 @@ void cmTryCompileCommand::CleanupFiles(const char* binDir)
return;
}
cmDirectory dir;
cmsys::Directory dir;
dir.Load(binDir);
size_t fileNum;
for (fileNum = 0; fileNum < dir.GetNumberOfFiles(); ++fileNum)
......
......@@ -6,6 +6,7 @@ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DTEST_CXX_FLAGS")
# Link to CMake lib
LINK_DIRECTORIES(${Complex_BINARY_DIR}/../../Source)
LINK_DIRECTORIES(${Complex_BINARY_DIR}/../../Source/kwsys)
# Use LINK_LIBRARIES instead of TARGET_LINK_LIBRARIES to
SET(COMPLEX_LIBS CMakeTestLibrary;CMakeTestLibraryShared;CMakeTestCLibraryShared)
LINK_LIBRARIES(${COMPLEX_LIBS})
......@@ -13,9 +14,9 @@ LINK_LIBRARIES(${COMPLEX_LIBS})
ADD_EXECUTABLE(complex complex)
IF (UNIX)
TARGET_LINK_LIBRARIES(complex CMakeLib ${CMAKE_DL_LIBS})
TARGET_LINK_LIBRARIES(complex CMakeLib cmsys ${CMAKE_DL_LIBS})
ELSE(UNIX)
TARGET_LINK_LIBRARIES(complex CMakeLib)
TARGET_LINK_LIBRARIES(complex CMakeLib cmsys)
IF (NOT BORLAND)
TARGET_LINK_LIBRARIES(complex rpcrt4.lib)
ENDIF(NOT BORLAND)
......
......@@ -6,6 +6,7 @@ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DTEST_CXX_FLAGS")
# Link to CMake lib
LINK_DIRECTORIES(${Complex_BINARY_DIR}/../../Source)
LINK_DIRECTORIES(${Complex_BINARY_DIR}/../../Source/kwsys)
# Use LINK_LIBRARIES instead of TARGET_LINK_LIBRARIES to
SET(COMPLEX_LIBS CMakeTestLibrary;CMakeTestLibraryShared;CMakeTestCLibraryShared)
LINK_LIBRARIES(${COMPLEX_LIBS})
......@@ -13,9 +14,9 @@ LINK_LIBRARIES(${COMPLEX_LIBS})
ADD_EXECUTABLE(complex complex)
IF (UNIX)
TARGET_LINK_LIBRARIES(complex CMakeLib ${CMAKE_DL_LIBS})
TARGET_LINK_LIBRARIES(complex CMakeLib cmsys ${CMAKE_DL_LIBS})
ELSE(UNIX)
TARGET_LINK_LIBRARIES(complex CMakeLib)
TARGET_LINK_LIBRARIES(complex CMakeLib cmsys)
IF (NOT BORLAND)
TARGET_LINK_LIBRARIES(complex rpcrt4.lib)
ENDIF(NOT BORLAND)
......
......@@ -6,6 +6,7 @@ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DTEST_CXX_FLAGS")
# Link to CMake lib
LINK_DIRECTORIES(${Complex_BINARY_DIR}/../../Source)
LINK_DIRECTORIES(${Complex_BINARY_DIR}/../../Source/kwsys)
# Use LINK_LIBRARIES instead of TARGET_LINK_LIBRARIES to
SET(COMPLEX_LIBS CMakeTestLibrary;CMakeTestLibraryShared;CMakeTestCLibraryShared)
LINK_LIBRARIES(${COMPLEX_LIBS})
......@@ -13,9 +14,9 @@ LINK_LIBRARIES(${COMPLEX_LIBS})
ADD_EXECUTABLE(complex complex)
IF (UNIX)
TARGET_LINK_LIBRARIES(complex CMakeLib ${CMAKE_DL_LIBS})
TARGET_LINK_LIBRARIES(complex CMakeLib cmsys ${CMAKE_DL_LIBS})
ELSE(UNIX)
TARGET_LINK_LIBRARIES(complex CMakeLib)
TARGET_LINK_LIBRARIES(complex CMakeLib cmsys)
IF (NOT BORLAND)
TARGET_LINK_LIBRARIES(complex rpcrt4.lib)
ENDIF(NOT BORLAND)
......
......@@ -33,7 +33,6 @@ CMAKE_SOURCES="\
cmRegularExpression \
cmSourceFile \
cmSystemTools \
cmDirectory \
cmGlobalUnixMakefileGenerator \
cmLocalUnixMakefileGenerator \
cmCommands \
......@@ -44,6 +43,24 @@ CMAKE_SOURCES="\
cmVariableWatch \
cmSourceGroup"
KWSYS_SOURCES="\
Directory \
RegularExpression \
SystemTools"
KWSYS_FILES="\
Directory.hxx \
Process.h \
RegularExpression.hxx \
StandardIncludes.hxx \
SystemTools.hxx"
KWSYS_STD_FILES="
fstream \
iosfwd \
iostream \
sstream"
cmake_system=`uname`
cmake_source_dir=`echo $0 | sed -n '/\//{s/\/[^\/]*$//;p;}'`
......@@ -117,6 +134,8 @@ cmake_replace_string ()
mv -f "${OUTFILE}.tmp" "${OUTFILE}"
fi
fi
else
cmake_error "Cannot find file ${INFILE}"
fi
}
......@@ -251,6 +270,16 @@ if [ ! -d "${cmake_bootstrap_dir}" ]; then
fi
cd "${cmake_bootstrap_dir}"
[ -d "cmsys" ] || mkdir "cmsys"
if [ ! -d "cmsys" ]; then
cmake_error "Cannot create directory ${cmake_bootstrap_dir}/cmsys"
fi
[ -d "cmsys/std" ] || mkdir "cmsys/std"
if [ ! -d "cmsys/std" ]; then
cmake_error "Cannot create directory ${cmake_bootstrap_dir}/cmsys/std"
fi
# Delete all the bootstrap files
rm -f "${cmake_bootstrap_dir}/cmake_bootstrap.log"
......@@ -406,9 +435,12 @@ cmake_report cmConfigure.h.tmp " */"
# Test for STD namespace
if cmake_try_run "${cmake_cxx_compiler}" "${cmake_cxx_flags}" "${cmake_source_dir}/Modules/TestForSTDNamespace.cxx" >> cmake_bootstrap.log 2>&1; then
cmake_report cmConfigure.h.tmp "/* #undef CMAKE_NO_STD_NAMESPACE */"
cmake_report cmConfigure.h.tmp "#define cmsys_std std"
echo "${cmake_cxx_compiler} has STD namespace"
else
cmake_report cmConfigure.h.tmp "#define CMAKE_NO_STD_NAMESPACE 1"
cmake_report cmConfigure.h.tmp "#define KWSYS_NO_STD_NAMESPACE"
cmake_report cmConfigure.h.tmp "#define cmsys_std"
echo "${cmake_cxx_compiler} does not have STD namespace"
fi
......@@ -418,6 +450,8 @@ if cmake_try_run "${cmake_cxx_compiler}" "${cmake_cxx_flags}" "${cmake_source_di
echo "${cmake_cxx_compiler} has ANSI stream headers"
else
cmake_report cmConfigure.h.tmp "#define CMAKE_NO_ANSI_STREAM_HEADERS 1"
cmake_report cmConfigure.h.tmp "#define KWSYS_NO_ANSI_STREAM_HEADERS 1"
cmake_report cmConfigure.h.tmp "#define cmsys_NO_ANSI_STREAM_HEADERS"
echo "${cmake_cxx_compiler} does not have ANSI stream headers"
fi
......@@ -432,6 +466,8 @@ if cmake_try_run "${cmake_cxx_compiler}" "${cmake_cxx_flags}" "${TMPFILE}.cxx" >
echo "${cmake_cxx_compiler} has ANSI string streams"
else
cmake_report cmConfigure.h.tmp "#define CMAKE_NO_ANSI_STRING_STREAM 1"
cmake_report cmConfigure.h.tmp "#define KWSYS_NO_ANSI_STRING_STREAM 1"
cmake_report cmConfigure.h.tmp "#define cmsys_NO_ANSI_STRING_STREAM 1"
echo "${cmake_cxx_compiler} does not have ANSI string streams"
fi
rm -f "${TMPFILE}.cxx"
......@@ -444,6 +480,11 @@ else
cmake_report cmConfigure.h.tmp "#define CMAKE_NO_ANSI_FOR_SCOPE 1"
echo "${cmake_cxx_compiler} does not have ANSI for scoping"
fi
cmake_report cmConfigure.h.tmp "/* Defined if std namespace is the GCC hack. */"
cmake_report cmConfigure.h.tmp "#if defined(__GNUC__) && (__GNUC__ < 3)"
cmake_report cmConfigure.h.tmp "# define cmsys_FAKE_STD_NAMESPACE"
cmake_report cmConfigure.h.tmp "#endif"
cmake_report cmConfigure.h.tmp "#define kwsys_std cmsys_std"
# Write CMake version
for a in MAJOR MINOR PATCH; do
......@@ -458,12 +499,29 @@ if diff cmConfigure.h cmConfigure.h.tmp > /dev/null 2> /dev/null; then
rm -f cmConfigure.h.tmp
else
mv -f cmConfigure.h.tmp cmConfigure.h
cp cmConfigure.h cmsys/Configure.hxx
fi
# Prepare KWSYS
for a in ${KWSYS_FILES}; do
cmake_replace_string "${cmake_source_dir}/Source/kwsys/${a}.in" \
"${cmake_bootstrap_dir}/cmsys/${a}" KWSYS_NAMESPACE cmsys
done
for a in ${KWSYS_STD_FILES}; do
cmake_replace_string "${cmake_source_dir}/Source/kwsys/kwsys_std_${a}.h.in" \
"${cmake_bootstrap_dir}/cmsys/std/${a}" KWSYS_NAMESPACE cmsys
done
cmake_replace_string "${cmake_source_dir}/Source/kwsys/kwsys_std.h.in" \
"${cmake_bootstrap_dir}/cmsys/std/stl.h.in" KWSYS_NAMESPACE cmsys
for a in string vector; do
cmake_replace_string "${cmake_bootstrap_dir}/cmsys/std/stl.h.in" \
"${cmake_bootstrap_dir}/cmsys/std/${a}" KWSYS_STL_HEADER ${a}
done
# Generate Makefile
dep="cmConfigure.h `cmake_escape \"${cmake_source_dir}\"`/Source/*.h"
objs=""
for a in ${CMAKE_SOURCES}; do
for a in ${CMAKE_SOURCES} ${KWSYS_SOURCES}; do
objs="${objs} ${a}.o"
done
......@@ -483,6 +541,11 @@ for a in ${CMAKE_SOURCES}; do
echo "${a}.o : ${src} ${dep}" >> "${cmake_bootstrap_dir}/Makefile"
echo " ${cmake_cxx_compiler} ${cmake_cxx_flags} -c ${src} -o ${a}.o" >> "${cmake_bootstrap_dir}/Makefile"
done
for a in ${KWSYS_SOURCES}; do
src=`cmake_escape "${cmake_source_dir}/Source/kwsys/${a}.cxx"`
echo "${a}.o : ${src} ${dep}" >> "${cmake_bootstrap_dir}/Makefile"
echo " ${cmake_cxx_compiler} ${cmake_cxx_flags} -I`cmake_escape \"${cmake_bootstrap_dir}/cmsys\"` -DKWSYS_NAMESPACE=cmsys -c ${src} -o ${a}.o" >> "${cmake_bootstrap_dir}/Makefile"
done
# Write prefix to Bootstrap.cmk/InitialConfigureFlags.cmake
echo "SET (CMAKE_CONFIGURE_INSTALL_PREFIX \"${cmake_prefix_dir}\" CACHE PATH \"Install path prefix, prepended onto install directories, For CMake this will always override CMAKE_INSTALL_PREFIX in the cache.\")" > "${cmake_bootstrap_dir}/InitialConfigureFlags.cmake"
......
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