ENH: CMake and configure now use SUBDIRS in CMakeLists.txt to find all the directories of the system.

This commit is contained in:
Bill Hoffman 2000-09-12 05:30:35 -04:00
parent e2ad65d3c2
commit aa3ca2b432
38 changed files with 727 additions and 927 deletions

View File

@ -4,14 +4,14 @@
#------------------------------------------------------------------------------
# Include all variable settings
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_OBJ_DIR@/CMake/CMakeVariables.make@MAKEQUOTE@
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_CONFIG_DIR@/CMake/CMakeVariables.make@MAKEQUOTE@
#------------------------------------------------------------------------------
# Include user-editable defines.
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_OBJ_DIR@/CMakeLocal.make@MAKEQUOTE@
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_CONFIG_DIR@/CMakeLocal.make@MAKEQUOTE@
#------------------------------------------------------------------------------
# Include General Build Rules
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_OBJ_DIR@/CMake/CMakeRules.make@MAKEQUOTE@
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_CONFIG_DIR@/CMake/CMakeRules.make@MAKEQUOTE@

View File

@ -1,5 +1,5 @@
# include simple rules for building .o files
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_OBJ_DIR@/CMake/CMakeSimpleRules.make@MAKEQUOTE@
# include simple rules for building .o files from source files
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_CONFIG_DIR@/CMake/CMakeSimpleRules.make@MAKEQUOTE@
#
# Makefile for
@ -10,18 +10,18 @@ all: CMakeTargets.make ${OBJ_SUB_DIRS} ${EXECUTABLES} ${SUBDIR_BUILD} ${BUILD_LI
#------------------------------------------------------------------------------
${CMAKE}: @fullSrcDir@/CMake/Source/*.cxx @fullSrcDir@/CMake/Source/*.h
cd @CMAKE_OBJ_DIR@/CMake/Source; ${MAKE} CMakeBuildTargets
${CMAKE}: ${topdir}/CMake/Source/*.cxx ${topdir}/CMake/Source/*.h
cd ${CMAKE_CONFIG_DIR}/CMake/Source; ${MAKE} CMakeBuildTargets
depend: ${CMAKE}
${CMAKE} ${srcdir}/CMakeLists.txt -S${srcdir} -I${srcdir} ${INCLUDE_FLAGS}
${MAKE} -${MAKEFLAGS} CMakeTargets.make
clean: ${SUBDIR_CLEAN}
rm -f ${SRC_OBJ} ${EXECUTABLES}
CMakeTargets.make: ${CMAKE} ${srcdir}/CMakeLists.txt
${CMAKE} ${srcdir}/CMakeLists.txt -S${srcdir} -I${srcdir} ${INCLUDE_FLAGS}
${CMAKE} ${srcdir}/CMakeLists.txt -S${srcdir} -H${topdir} -B${CMAKE_CONFIG_DIR}
#------------------------------------------------------------------------------
# rules for the normal library

5
CMakeTargets.make.in Normal file
View File

@ -0,0 +1,5 @@
#empty file used by configure to generate initial targets.make files
#if you find this as a make error, then the autoconf system is not
#working, send for help on the insight mailing list...

View File

@ -1,11 +1,39 @@
# ***** BEGIN VARIBLES THAT CAN BE OVERRIDDEN IN CMakeLocal.make.in **************
# CMakeLocal.make.in should be in the directory where you run configure
# in, which need not be the source directory
# use this to add targets to the default all
# so they are built when make is run by default
LOCAL_BUILD_TARGETS =
# use this flag to add -L and -l options to the link line
LOCAL_LINK_FLAGS =
# use this flag to add -I flags to the compile line
LOCAL_INCLUDE_FLAGS =
# use this flag to add compiler options like -g -O, etc
# for the "C" compiler, for gcc these default to -g -O2
USER_CFLAGS = @CFLAGS@
# use this flag to add compiler options like -g -O, etc
# for the "C++" compiler, for gcc these default to -g -O2
USER_CXXFLAGS = @CXXFLAGS@
# ***** END VARIBLES THAT CAN BE OVERRIDDEN IN CMakeLocal.make.in **************
# This is the path to the top of the Source tree
topdir = @fullSrcDir@
CONFIG_DIR = @CMAKE_OBJ_DIR@
# This is the directory configure was run in
# where the binaries will be placed
CMAKE_CONFIG_DIR = @CMAKE_CONFIG_DIR@
# the standard shell for make
SHELL = /bin/sh
CMAKE_OBJ_DIR = ${CONFIG_DIR}
RANLIB = @RANLIB@
CC = @CC@
CFLAGS = @ITK_SHLIB_CFLAGS@ @ANSI_CFLAGS@
@ -82,31 +110,21 @@ LIB_INSTALL_DIR = $(INSTALL_ROOT)$(exec_prefix)/lib
BIN_INSTALL_DIR = $(INSTALL_ROOT)$(exec_prefix)/bin
# set up the path to the rulesgen program
CMAKE = @CMAKE_OBJ_DIR@/CMake/Source/CMakeBuildTargets
CMAKE = @CMAKE_CONFIG_DIR@/CMake/Source/CMakeBuildTargets
KIT_OBJ = ${SRC_OBJ} ${EXTRA_KIT_OBJ}
# ***** BEGIN VARIBLES THAT CAN BE OVERRIDDEN IN CMakeLocal.make.in **************
LOCAL_BUILD_TARGETS =
LOCAL_LINK_FLAGS =
USER_CFLAGS = @CFLAGS@
USER_CXXFLAGS = @CXXFLAGS@
# ***** END VARIBLES THAT CAN BE OVERRIDDEN IN CMakeLocal.make.in **************
# compile line flags
INCLUDE_FLAGS = -I. \
-I${CONFIG_DIR}/Code/Insight3DParty/vxl \
-I${CONFIG_DIR} \
-I${topdir}/Code/Common \
-I${topdir}/Code/Insight3DParty/vxl
# C++ compile flags, INCLUDE_FLAGS is set in CMakeTargets.make which
# is generated by CMakeBuildTargets, see CMake/Source
CXX_FLAGS = ${CPPFLAGS} ${USER_CXXFLAGS} ${CXXFLAGS} \
${KIT_FLAGS} ${INCLUDE_FLAGS}
CC_FLAGS = ${CPPFLAGS} ${USER_CFLAGS} ${CFLAGS}
# C compile flags, INCLUDE_FLAGS is set in CMakeTargets.make which
# is generated by CMakeBuildTargets, see CMake/Source
CC_FLAGS = ${CPPFLAGS} ${USER_CFLAGS} ${CFLAGS} ${INCLUDE_FLAGS}

View File

@ -1,4 +1,4 @@
srcdir = @srcdir@
VPATH = @srcdir@
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_OBJ_DIR@/CMake/CMakeMaster.make@MAKEQUOTE@
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_CONFIG_DIR@/CMake/CMakeMaster.make@MAKEQUOTE@

11
README
View File

@ -32,9 +32,11 @@ CMakeBuildTargets -> Unix program to read CMakeLists.txt and generate CMakeT
makefile fragments:
CMakeMaster.make -> main file to be included by makefiles
CMakeVariables.make -> all make varibles are set in this file
CMakeRules.make -> All build rules are here
CMakeRules.make -> All build rules are here (except Simple Rules)
CMakeSimpleRules.make -> simple build rules for .o to .cxx, this is separate to be able
to build CMakeBuildTargets itself.
CMakeLocal.make -> Place for hand configuration
CMakeTargets.make -> generated rules for make style build
CMakeTargets.make -> generated rules for make style build in each directory
MakefileTemplate.make -> master makefile template used by configure to generate Makefiles
Unix install:
@ -50,7 +52,6 @@ make
TODO:
Fix cmUnixMakefile.cxx and cmDSPMakefile.cxx
to read libraries and -I stuff from a config file
configure stuff for windows should be a copy configure file
read in depend regular expression from a file

View File

@ -16,16 +16,21 @@ main(int ac, char** av)
for(int i =2; i < ac; i++)
{
std::string arg = av[i];
if(arg.find("-I",0) != std::string::npos)
{
std::string path = arg.substr(2);
md.AddSearchPath(path.c_str());
}
if(arg.find("-S",0) != std::string::npos)
{
std::string path = arg.substr(2);
mf->SetCurrentDirectory(path.c_str());
}
if(arg.find("-B",0) != std::string::npos)
{
std::string path = arg.substr(2);
mf->SetOutputHomeDirectory(path.c_str());
}
if(arg.find("-H",0) != std::string::npos)
{
std::string path = arg.substr(2);
mf->SetHomeDirectory(path.c_str());
}
}
}
if(!mf->ReadMakefile(av[1]))

View File

@ -1,48 +0,0 @@
#include "cmDSWBuilder.h"
#include "cmDSPBuilder.h"
#include <iostream>
void SetArgs(cmPCBuilder& builder, int ac, char** av)
{
for(int i =2; i < ac; i++)
{
std::string arg = av[i];
if(arg.find("-H",0) != std::string::npos)
{
std::string path = arg.substr(2);
builder.SetHomeDirectory(path.c_str());
}
if(arg.find("-D",0) != std::string::npos)
{
std::string path = arg.substr(2);
builder.SetCurrentDirectory(path.c_str());
}
}
}
main(int ac, char** av)
{
if(ac < 3)
{
std::cerr << "Usage: " << av[0] <<
" Makefile.in -[DSP|DSW] -Hinsighthome -Dcurrentdir ..." << std::endl;
return -1;
}
std::string arg = av[2];
if(arg.find("-DSP", 0) != std::string::npos)
{
cmDSPBuilder builder;
builder.SetInputMakefilePath(av[1]);
SetArgs(builder, ac, av);
builder.CreateDSPFile();
}
else
{
cmDSWBuilder builder;
builder.SetInputMakefilePath(av[1]);
SetArgs(builder, ac, av);
builder.CreateDSWFile();
}
return 0;
}

View File

@ -11,9 +11,6 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name pcbuilderCMD
End Project Dependency
Begin Project Dependency
Project_Dep_Name CMakeSetupCMD
End Project Dependency

View File

@ -1,8 +1,8 @@
#include "cmDSWBuilder.h"
#include "cmDSPBuilder.h"
#include "cmDSWMakefile.h"
#include "cmDSPMakefile.h"
#include <iostream>
void SetArgs(cmPCBuilder& builder, int ac, char** av)
void SetArgs(cmMakefile& builder, int ac, char** av)
{
for(int i =3; i < ac; i++)
{
@ -16,7 +16,7 @@ void SetArgs(cmPCBuilder& builder, int ac, char** av)
{
std::string path = arg.substr(2);
std::cerr << "set makefile dir " << path.c_str() << std::endl;
builder.SetMakefileDirectory(path.c_str());
builder.SetCurrentDirectory(path.c_str());
}
if(arg.find("-O",0) != std::string::npos)
{
@ -45,17 +45,17 @@ main(int ac, char** av)
std::string arg = av[2];
if(arg.find("-DSP", 0) != std::string::npos)
{
cmDSPBuilder builder;
cmDSPMakefile builder;
SetArgs(builder, ac, av);
builder.SetInputMakefilePath(av[1]);
builder.CreateDSPFile();
builder.ReadMakefile(av[1]);
builder.OutputDSPFile();
}
else
{
cmDSWBuilder builder;
cmDSWMakefile builder;
SetArgs(builder, ac, av);
builder.SetInputMakefilePath(av[1]);
builder.CreateDSWFile();
builder.ReadMakefile(av[1]);
builder.OutputDSWFile();
}
return 0;
}

View File

@ -99,6 +99,10 @@ SOURCE=.\cmClassFile.cxx
# End Source File
# Begin Source File
SOURCE=.\cmCollectFlags.cxx
# End Source File
# Begin Source File
SOURCE=.\cmDirectory.cxx
# End Source File
# Begin Source File

View File

@ -1,327 +0,0 @@
// CMakeSetupDialogDlg.cpp : implementation file
//
#include "stdafx.h"
#include "pcbuilder.h"
#include "CMakeSetupDialog.h"
#include "../itkDSWBuilder.h"
#include "../itkVC60Configure.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP();
/////////////////////////////////////////////////////////////////////////////
// CMakeSetupDialog dialog
CMakeSetupDialog::CMakeSetupDialog(CWnd* pParent /*=NULL*/)
: CDialog(CMakeSetupDialog::IDD, pParent)
{
//{{AFX_DATA_INIT(CMakeSetupDialog)
m_WhereITK = _T("");
m_WhereBuildITK = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_WhereITK = _T("");
this->LoadFromRegistry();
}
void CMakeSetupDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMakeSetupDialog)
DDX_Text(pDX, IDC_WhereITK, m_WhereITK);
DDX_Text(pDX, IDC_WhereITK2, m_WhereBuildITK);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMakeSetupDialog, CDialog)
//{{AFX_MSG_MAP(CMakeSetupDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_EN_CHANGE(IDC_WhereITK, OnChangeEdit1)
ON_BN_CLICKED(IDC_BUTTON2, OnBrowse)
ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
//}}AFX_MSG_MAP
END_MESSAGE_MAP();
/////////////////////////////////////////////////////////////////////////////
// CMakeSetupDialog message handlers
BOOL CMakeSetupDialog::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CMakeSetupDialog::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CMakeSetupDialog::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CMakeSetupDialog::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CMakeSetupDialog::OnChangeEdit1()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
}
void CMakeSetupDialog::OnBrowse()
{
this->UpdateData();
Browse(m_WhereITK, "Enter Path to Insight Source");
this->UpdateData(false);
}
bool CMakeSetupDialog::Browse(CString &result, const char *title)
{
// don't know what to do with initial right now...
char szPathName[4096];
BROWSEINFO bi;
bi.hwndOwner = m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = (LPTSTR)szPathName;
bi.lpszTitle = title;
bi.ulFlags = BIF_BROWSEINCLUDEFILES ;
bi.lpfn = NULL;
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
bool bSuccess = (bool)SHGetPathFromIDList(pidl, szPathName);
if(bSuccess)
{
result = szPathName;
}
return bSuccess;
}
void CMakeSetupDialog::OnOK()
{
// get all the info from the screen
this->UpdateData();
// configure the system for VC60
itkVC60Configure config;
config.SetWhereITK(m_WhereITK);
config.SetWhereBuildITK(m_WhereBuildITK);
config.Configure();
itkDSWBuilder builder;
// Set the ITK home directory
builder.SetHomeDirectory(m_WhereITK);
// Set the Makefile.in file
CString makefileIn = m_WhereITK;
makefileIn += "/Makefile.in";
builder.SetInputMakefilePath(makefileIn);
// Set the output directory
builder.SetOutputDirectory(m_WhereBuildITK);
// set the directory which contains the Makefile.in
builder.SetMakefileDirectory(m_WhereITK);
// Create the master DSW file and all children dsp files for ITK
builder.CreateDSWFile();
CDialog::OnOK();
this->SaveToRegistry();
}
void CMakeSetupDialog::OnButton3()
{
this->UpdateData();
Browse(m_WhereBuildITK, "Enter Path to Insight Build");
this->UpdateData(false);
}
void CMakeSetupDialog::SaveToRegistry()
{
HKEY hKey;
DWORD dwDummy;
if(RegCreateKeyEx(HKEY_CURRENT_USER,
_T("Software\\Kitware\\ITK PCBuilder\\Settings"),
0, "", REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE,
NULL, &hKey, &dwDummy) != ERROR_SUCCESS)
{
return;
}
else
{
RegSetValueEx(hKey, _T("WhereITK"), 0, REG_SZ,
(CONST BYTE *)(const char *)m_WhereITK,
m_WhereITK.GetLength());
RegSetValueEx(hKey, _T("WhereBuildITK"), 0, REG_SZ,
(CONST BYTE *)(const char *)m_WhereBuildITK,
m_WhereBuildITK.GetLength());
}
RegCloseKey(hKey);
}
void CMakeSetupDialog::ReadRegistryValue(HKEY hKey,
CString *val,
char *key,
char *adefault)
{
DWORD dwType, dwSize;
char *pb;
dwType = REG_SZ;
pb = val->GetBuffer(MAX_PATH);
dwSize = MAX_PATH;
if(RegQueryValueEx(hKey,_T(key), NULL, &dwType,
(BYTE *)pb, &dwSize) != ERROR_SUCCESS)
{
val->ReleaseBuffer();
*val = _T(adefault);
}
else
{
val->ReleaseBuffer();
}
}
void CMakeSetupDialog::LoadFromRegistry()
{
HKEY hKey;
if(RegOpenKeyEx(HKEY_CURRENT_USER,
_T("Software\\Kitware\\ITK PCBuilder\\Settings"),
0, KEY_READ, &hKey) != ERROR_SUCCESS)
{
return;
}
else
{
// save some values
this->ReadRegistryValue(hKey, &(m_WhereITK),"WhereITK","C:\\Insight");
this->ReadRegistryValue(hKey, &(m_WhereBuildITK),"WhereBuildITK",
"C:\\vtkbin");
}
RegCloseKey(hKey);
}

View File

@ -108,6 +108,10 @@ SOURCE=..\cmClassFile.cxx
# End Source File
# Begin Source File
SOURCE=..\cmCollectFlags.cxx
# End Source File
# Begin Source File
SOURCE=..\cmDirectory.cxx
# End Source File
# Begin Source File
@ -232,9 +236,5 @@ SOURCE=.\res\CMakeSetupDialog.ico
SOURCE=.\res\CMakeSetupDialog.rc2
# End Source File
# End Group
# Begin Source File
SOURCE=.\ReadMe.txt
# End Source File
# End Target
# End Project

View File

@ -4,7 +4,7 @@
#include "stdafx.h"
#include "CMakeSetup.h"
#include "CMakeSetupDialog.h"
#include "../cmDSWBuilder.h"
#include "../cmDSWMakefile.h"
#include "../itkVC60Configure.h"
#ifdef _DEBUG
@ -232,19 +232,19 @@ void CMakeSetupDialog::OnOK()
config.SetWhereBuild(m_WhereBuild);
config.Configure();
cmDSWBuilder builder;
cmDSWMakefile builder;
// Set the ITK home directory
builder.SetHomeDirectory(m_WhereSource);
// Set the CMakeLists.txt file
CString makefileIn = m_WhereSource;
makefileIn += "/CMakeLists.txt";
builder.SetInputMakefilePath(makefileIn);
builder.ReadMakefile(makefileIn);
// Set the output directory
builder.SetOutputDirectory(m_WhereBuild);
// set the directory which contains the CMakeLists.txt
builder.SetMakefileDirectory(m_WhereSource);
builder.SetCurrentDirectory(m_WhereSource);
// Create the master DSW file and all children dsp files for ITK
builder.CreateDSWFile();
builder.OutputDSWFile();
CDialog::OnOK();
this->SaveToRegistry();
}

View File

@ -6,8 +6,8 @@ VPATH = @srcdir@
# This will cause an infinite loop as it will add the
# rule for changing into this directory
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_OBJ_DIR@/CMake/CMakeVariables.make@MAKEQUOTE@
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_OBJ_DIR@/CMake/CMakeSimpleRules.make@MAKEQUOTE@
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_CONFIG_DIR@/CMake/CMakeVariables.make@MAKEQUOTE@
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_CONFIG_DIR@/CMake/CMakeSimpleRules.make@MAKEQUOTE@
OBJS = \
cmClassFile.o \
@ -16,12 +16,16 @@ cmMakefile.o \
cmUnixMakefile.o \
cmMakeDepend.o \
cmRegularExpression.o \
CMakeBuildTargets.o
cmSystemTools.o \
CMakeBuildTargets.o \
cmCollectFlags.o
cmDirectory.o : cmDirectory.h cmDirectory.cxx
cmClassFile.o : cmClassFile.h cmClassFile.cxx
cmMakefile.o : cmMakefile.h cmMakefile.cxx cmClassFile.h
cmCollectFlags.o : cmCollectFlags.h cmCollectFlags.cxx cmSystemTools.h
cmSystemTools.o : cmSystemTools.h cmSystemTools.cxx cmSystemTools.h
cmDirectory.o : cmDirectory.h cmDirectory.cxx cmSystemTools.h
cmClassFile.o : cmClassFile.h cmClassFile.cxx cmSystemTools.h
cmMakefile.o : cmMakefile.h cmMakefile.cxx cmClassFile.h cmSystemTools.h
cmUnixMakefile.o : cmUnixMakefile.h cmUnixMakefile.cxx cmMakefile.h cmClassFile.h
cmMakeDepend.o : cmMakeDepend.h cmMakeDepend.cxx cmMakefile.h cmClassFile.h cmRegularExpression.h
cmRegularExpression.o : cmRegularExpression.h cmRegularExpression.cxx

View File

@ -2,23 +2,10 @@
#pragma warning ( disable : 4786 )
#endif
#include "cmClassFile.h"
#include <sys/stat.h>
#include "cmSystemTools.h"
#include <iostream>
// Helper function to hide the use of system stat function
bool cmFileExists(const char* filename)
{
struct stat fs;
if (stat(filename, &fs) != 0)
{
return false;
}
else
{
return true;
}
}
// Set the name of the class and the full path to the file.
// The class must be found in dir and end in name.cxx, name.txx,
@ -37,7 +24,7 @@ void cmClassFile::SetName(const char* name, const char* dir)
pathname += m_ClassName;
std::string hname = pathname;
hname += ".cxx";
if(cmFileExists(hname.c_str()))
if(cmSystemTools::FileExists(hname.c_str()))
{
m_HeaderFileOnly = false;
m_FullPath = hname;
@ -46,7 +33,7 @@ void cmClassFile::SetName(const char* name, const char* dir)
hname = pathname;
hname += ".c";
if(cmFileExists(hname.c_str()))
if(cmSystemTools::FileExists(hname.c_str()))
{
m_HeaderFileOnly = false;
m_FullPath = hname;
@ -54,13 +41,19 @@ void cmClassFile::SetName(const char* name, const char* dir)
}
hname = pathname;
hname += ".txx";
if(cmFileExists(hname.c_str()))
if(cmSystemTools::FileExists(hname.c_str()))
{
m_HeaderFileOnly = false;
m_FullPath = hname;
return;
}
std::cerr << "file seems to be a header only " << hname << " " << m_ClassName.c_str() << std::endl;
hname = pathname;
hname += ".h";
if(!cmSystemTools::FileExists(hname.c_str()))
{
std::cerr << "ERROR, can not find file " << hname;
std::cerr << "Tried .txx .cxx .c " << std::endl;
}
}

View File

@ -22,19 +22,25 @@
#include <string>
#include <vector>
// helper function returns true if a file exits
bool cmFileExists(const char* filename);
struct cmClassFile
{
// Set the name of the file
/**
* Set the name of the file, given the directory
* the file should be in. Extensions are tried on
* the name in the directory to find the actual file.
*/
void SetName(const char* name, const char* dir);
/**
* print the structure to cout
*/
void Print();
bool m_AbstractClass;
bool m_HeaderFileOnly;
std::string m_FullPath;
std::string m_ClassName;
bool m_AbstractClass; // is this an abstract class
bool m_HeaderFileOnly; // is this file only a header file
std::string m_FullPath; // full path to the file
std::string m_ClassName; // class name
// list of files that this file depends on
std::vector<std::string> m_Depends;
};

View File

@ -1,31 +0,0 @@
#ifdef _MSC_VER
#pragma warning ( disable : 4786 )
#endif
#include "cmDSPBuilder.h"
#include "cmDSPMakefile.h"
cmDSPBuilder::~cmDSPBuilder()
{
delete m_Makefile;
}
cmDSPBuilder::cmDSPBuilder()
{
m_Makefile = new cmDSPMakefile;
}
cmMakefile* cmDSPBuilder::GetMakefile()
{
return m_Makefile;
}
void cmDSPBuilder::CreateDSPFile()
{
m_Makefile->OutputDSPFile();
}
std::vector<std::string> cmDSPBuilder::GetCreatedProjectNames()
{
return m_Makefile->GetCreatedProjectNames();
}

View File

@ -1,40 +0,0 @@
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: $RCSfile$
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 2000 National Library of Medicine
All rights reserved.
See COPYRIGHT.txt for copyright details.
=========================================================================*/
/**
* cmDSPBuilder is a Facade class for cmDSWMakefile
*/
#ifndef __cmDSPBuilder_h
#define __cmDSPBuilder_h
#include "cmPCBuilder.h"
#include <vector>
#include <string>
class cmDSPMakefile;
class cmDSPBuilder : public cmPCBuilder
{
public:
cmDSPBuilder();
~cmDSPBuilder();
void CreateDSPFile();
std::vector<std::string> GetCreatedProjectNames();
virtual cmMakefile* GetMakefile();
protected:
cmDSPMakefile* m_Makefile;
};
#endif

View File

@ -1,8 +1,11 @@
#include "cmDSPMakefile.h"
#include "cmSystemTools.h"
#include "cmCollectFlags.h"
#include <iostream>
#include <fstream>
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#undef GetCurrentDirectory
static void Die(const char* message)
{
@ -13,28 +16,49 @@ static void Die(const char* message)
void cmDSPMakefile::OutputDSPFile()
{
m_IncludeOptions = "/STACK:10000000 ";
m_IncludeOptions = "/I \"";
m_IncludeOptions += this->GetHomeDirectory();
m_IncludeOptions += "/Code/Common\" ";
m_IncludeOptions += "/I \"";
m_IncludeOptions += this->GetHomeDirectory();
m_IncludeOptions += "/Code/Insight3DParty/vxl\" ";
// Add the Build directory vcl to the -I path for config.h type stuff
m_IncludeOptions += "/I \"";
m_IncludeOptions += this->GetOutputHomeDirectory();
m_IncludeOptions += "/Code/Insight3DParty/vxl\" ";
// Add the Build directory to the -I path for config.h type stuff
m_IncludeOptions += "/I \"";
m_IncludeOptions += this->GetOutputHomeDirectory();
m_IncludeOptions += "\" ";
m_DebugLibraryOptions = " ITKCommon.lib ITKNumerics.lib ";
m_DebugLibraryOptions += " /LIBPATH:\"";
m_DebugLibraryOptions += this->GetOutputHomeDirectory();
m_DebugLibraryOptions += "/Code/Common/Debug\" ";
m_DebugLibraryOptions += " /LIBPATH:\"";
m_DebugLibraryOptions += this->GetOutputHomeDirectory();
m_DebugLibraryOptions += "/Code/Insight3DParty/vxl/Debug\" ";
std::vector<std::string>& includes = m_BuildFlags.GetIncludeDirectories();
std::vector<std::string>::iterator i;
for(i = includes.begin(); i != includes.end(); ++i)
{
std::string include = *i;
cmSystemTools::ReplaceString(include, "${CMAKE_CONFIG_DIR}",
this->GetOutputHomeDirectory() );
cmSystemTools::ReplaceString(include, "${srcdir}",
this->GetHomeDirectory() );
m_IncludeOptions += "/I \"";
m_IncludeOptions += include;
m_IncludeOptions += "\" ";
}
std::vector<std::string>& libs = m_BuildFlags.GetLinkLibraries();
for(i = libs.begin(); i != libs.end(); ++i)
{
m_DebugLibraryOptions += " ";
m_DebugLibraryOptions += *i;
m_DebugLibraryOptions += ".lib ";
}
std::vector<std::string>& libswin32 = m_BuildFlags.GetLinkLibrariesWin32();
for(i = libswin32.begin(); i != libswin32.end(); ++i)
{
m_DebugLibraryOptions += " ";
m_DebugLibraryOptions += *i;
m_DebugLibraryOptions += ".lib ";
}
std::vector<std::string>& libdirs = m_BuildFlags.GetLinkDirectories();
for(i = libdirs.begin(); i != libdirs.end(); ++i)
{
m_DebugLibraryOptions += " /LIBPATH:\"";
m_DebugLibraryOptions += *i;
cmSystemTools::ReplaceString(m_DebugLibraryOptions, "${CMAKE_CONFIG_DIR}",
this->GetOutputHomeDirectory() );
if(i->find("Debug") == std::string::npos)
{
if(i->find("Release") == std::string::npos)
{
m_DebugLibraryOptions += "/Debug\" ";
}
}
}
m_DebugLibraryOptions += "/STACK:10000000 ";
m_ReleaseLibraryOptions = m_DebugLibraryOptions;
cmSystemTools::ReplaceString(m_ReleaseLibraryOptions, "Debug", "Release");
// If the output directory is not the m_cmHomeDirectory
@ -123,7 +147,6 @@ void cmDSPMakefile::WriteDSPBuildRule(std::ostream& fout)
{
std::string dspname = *(m_CreatedProjectNames.end()-1);
dspname += ".dsp";
#undef GetCurrentDirectory
std::string makefileIn = this->GetCurrentDirectory();
makefileIn += "/";
makefileIn += "CMakeLists.txt";

View File

@ -1,8 +1,11 @@
#include "cmDSPMakefile.h"
#include "cmSystemTools.h"
#include "cmCollectFlags.h"
#include <iostream>
#include <fstream>
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#undef GetCurrentDirectory
static void Die(const char* message)
{
@ -13,28 +16,49 @@ static void Die(const char* message)
void cmDSPMakefile::OutputDSPFile()
{
m_IncludeOptions = "/STACK:10000000 ";
m_IncludeOptions = "/I \"";
m_IncludeOptions += this->GetHomeDirectory();
m_IncludeOptions += "/Code/Common\" ";
m_IncludeOptions += "/I \"";
m_IncludeOptions += this->GetHomeDirectory();
m_IncludeOptions += "/Code/Insight3DParty/vxl\" ";
// Add the Build directory vcl to the -I path for config.h type stuff
m_IncludeOptions += "/I \"";
m_IncludeOptions += this->GetOutputHomeDirectory();
m_IncludeOptions += "/Code/Insight3DParty/vxl\" ";
// Add the Build directory to the -I path for config.h type stuff
m_IncludeOptions += "/I \"";
m_IncludeOptions += this->GetOutputHomeDirectory();
m_IncludeOptions += "\" ";
m_DebugLibraryOptions = " ITKCommon.lib ITKNumerics.lib ";
m_DebugLibraryOptions += " /LIBPATH:\"";
m_DebugLibraryOptions += this->GetOutputHomeDirectory();
m_DebugLibraryOptions += "/Code/Common/Debug\" ";
m_DebugLibraryOptions += " /LIBPATH:\"";
m_DebugLibraryOptions += this->GetOutputHomeDirectory();
m_DebugLibraryOptions += "/Code/Insight3DParty/vxl/Debug\" ";
std::vector<std::string>& includes = m_BuildFlags.GetIncludeDirectories();
std::vector<std::string>::iterator i;
for(i = includes.begin(); i != includes.end(); ++i)
{
std::string include = *i;
cmSystemTools::ReplaceString(include, "${CMAKE_CONFIG_DIR}",
this->GetOutputHomeDirectory() );
cmSystemTools::ReplaceString(include, "${srcdir}",
this->GetHomeDirectory() );
m_IncludeOptions += "/I \"";
m_IncludeOptions += include;
m_IncludeOptions += "\" ";
}
std::vector<std::string>& libs = m_BuildFlags.GetLinkLibraries();
for(i = libs.begin(); i != libs.end(); ++i)
{
m_DebugLibraryOptions += " ";
m_DebugLibraryOptions += *i;
m_DebugLibraryOptions += ".lib ";
}
std::vector<std::string>& libswin32 = m_BuildFlags.GetLinkLibrariesWin32();
for(i = libswin32.begin(); i != libswin32.end(); ++i)
{
m_DebugLibraryOptions += " ";
m_DebugLibraryOptions += *i;
m_DebugLibraryOptions += ".lib ";
}
std::vector<std::string>& libdirs = m_BuildFlags.GetLinkDirectories();
for(i = libdirs.begin(); i != libdirs.end(); ++i)
{
m_DebugLibraryOptions += " /LIBPATH:\"";
m_DebugLibraryOptions += *i;
cmSystemTools::ReplaceString(m_DebugLibraryOptions, "${CMAKE_CONFIG_DIR}",
this->GetOutputHomeDirectory() );
if(i->find("Debug") == std::string::npos)
{
if(i->find("Release") == std::string::npos)
{
m_DebugLibraryOptions += "/Debug\" ";
}
}
}
m_DebugLibraryOptions += "/STACK:10000000 ";
m_ReleaseLibraryOptions = m_DebugLibraryOptions;
cmSystemTools::ReplaceString(m_ReleaseLibraryOptions, "Debug", "Release");
// If the output directory is not the m_cmHomeDirectory
@ -123,7 +147,6 @@ void cmDSPMakefile::WriteDSPBuildRule(std::ostream& fout)
{
std::string dspname = *(m_CreatedProjectNames.end()-1);
dspname += ".dsp";
#undef GetCurrentDirectory
std::string makefileIn = this->GetCurrentDirectory();
makefileIn += "/";
makefileIn += "CMakeLists.txt";

View File

@ -1,22 +0,0 @@
#include "cmDSWBuilder.h"
#include "cmDSWMakefile.h"
cmDSWBuilder::~cmDSWBuilder()
{
delete m_Makefile;
}
cmDSWBuilder::cmDSWBuilder()
{
m_Makefile = new cmDSWMakefile;
}
cmMakefile* cmDSWBuilder::GetMakefile()
{
return m_Makefile;
}
void cmDSWBuilder::CreateDSWFile()
{
m_Makefile->OutputDSWFile();
}

View File

@ -1,38 +0,0 @@
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: $RCSfile$
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 2000 National Library of Medicine
All rights reserved.
See COPYRIGHT.txt for copyright details.
=========================================================================*/
/**
* cmDSWBuilder
*/
#ifndef __cmDSWBuilder_h
#define __cmDSWBuilder_h
#include "cmPCBuilder.h"
class cmDSWMakefile;
class cmDSWBuilder : public cmPCBuilder
{
public:
cmDSWBuilder();
~cmDSWBuilder();
void CreateDSWFile();
virtual cmMakefile* GetMakefile();
protected:
cmDSWMakefile* m_Makefile;
};
#endif

View File

@ -2,12 +2,15 @@
#pragma warning ( disable : 4786 )
#endif
#include "cmDSWMakefile.h"
#include "cmDSPBuilder.h"
#include "cmSystemTools.h"
#include "cmDSPMakefile.h"
#include <iostream>
#include <fstream>
#include <windows.h>
// microsoft nonsense
#undef GetCurrentDirectory
#undef SetCurrentDirectory
// virtual override, ouput the makefile
void cmDSWMakefile::OutputDSWFile()
@ -27,80 +30,139 @@ void cmDSWMakefile::OutputDSWFile()
MessageBox(0, m_OutputDirectory.c_str(), 0, MB_OK);
}
}
std::string fname;
fname = m_OutputDirectory;
fname += "/";
fname += this->m_LibraryName;
fname += ".dsw";
std::cerr << "writting dsw file " << fname.c_str() << std::endl;
std::ofstream fout(fname.c_str());
if(!fout)
{
std::cerr << "Error can not open " << fname.c_str() << " for write" << std::endl;
std::cerr << "Error can not open "
<< fname.c_str() << " for write" << std::endl;
return;
}
this->WriteDSWFile(fout);
}
void cmDSWMakefile::WriteDSWFile(std::ostream& fout)
// ------------------------------------------------
// Recursive function to find all the CMakeLists.txt files
// in a project. As each file is read in, any directories in
// the SUBDIR variable are also passed back to this function.
// The result is a vector of cmDSPMakefile objects, one for
// each directory with a CMakeLists.txt file
//
void cmDSWMakefile::FindAllCMakeListsFiles(const char* subdir,
std::vector<cmDSPMakefile*>& makefiles)
{
this->WriteDSWHeader(fout);
for(std::vector<std::string>::iterator i = m_SubDirectories.begin();
i != m_SubDirectories.end(); ++i)
{
const char* dir = (*i).c_str();
std::vector<std::string> dspnames = this->CreateDSPFile(dir);
std::cerr << "Create dsp for " << dspnames.size() << " number of dsp files in " << dir << std::endl;
for(std::vector<std::string>::iterator si = dspnames.begin();
si != dspnames.end(); ++si)
{
std::string dspname = *si;
std::cerr << "Create dsp for " << (*si).c_str() << std::endl;
if(dspname == "")
{
std::cerr << "Project name not found in " << dir << "/CMakeLists.txt" << std::endl;
std::cerr << "Skipping Project " << std::endl;
}
else
{
std::string subdir = "./";
subdir += dir;
this->WriteProject(fout, dspname.c_str(), subdir.c_str());
}
}
}
this->WriteDSWFooter(fout);
}
std::vector<std::string> cmDSWMakefile::CreateDSPFile(const char* subdir)
{
#undef GetCurrentDirectory
std::string currentDir = this->GetCurrentDirectory();
currentDir += "/";
currentDir += subdir;
cmDSPBuilder dsp;
dsp.SetOutputHomeDirectory(this->GetOutputDirectory());
dsp.SetHomeDirectory(this->GetHomeDirectory());
dsp.SetMakefileDirectory(currentDir.c_str());
std::string outdir = m_OutputDirectory;
outdir += "/";
outdir += subdir;
dsp.SetOutputDirectory(outdir.c_str());
currentDir += "/";
currentDir += "CMakeLists.txt";
dsp.SetInputMakefilePath(currentDir.c_str());
dsp.CreateDSPFile();
return dsp.GetCreatedProjectNames();
// CMakeLists.txt exits in the subdirectory
// then create a cmDSPMakefile for it
if(cmSystemTools::FileExists(currentDir.c_str()))
{
// Create a new cmDSPMakefile to read the currentDir CMakeLists.txt file
cmDSPMakefile* dsp = new cmDSPMakefile;
// add it to the vector
makefiles.push_back(dsp);
// Set up the file with the current context
dsp->SetOutputHomeDirectory(this->GetOutputDirectory());
dsp->SetHomeDirectory(this->GetHomeDirectory());
// set the current directory in the Source as a full
// path
std::string currentDir = this->GetCurrentDirectory();
currentDir += "/";
currentDir += subdir;
dsp->SetCurrentDirectory(currentDir.c_str());
// Parse the CMakeLists.txt file
currentDir += "/CMakeLists.txt";
dsp->ReadMakefile(currentDir.c_str());
// Set the output directory which may be different than the source
std::string outdir = m_OutputDirectory;
outdir += "/";
outdir += subdir;
dsp->SetOutputDirectory(outdir.c_str());
// Create the DSP file
dsp->OutputDSPFile();
// Look at any sub directories parsed (SUBDIRS) and
// recurse into them
const std::vector<std::string>& subdirs = dsp->GetSubDirectories();
for(std::vector<std::string>::const_iterator i = subdirs.begin();
i != subdirs.end(); ++i)
{
// append the subdirectory to the current directoy subdir
std::string nextDir = subdir;
nextDir += "/";
nextDir += i->c_str();
// recurse into nextDir
this->FindAllCMakeListsFiles(nextDir.c_str(),
makefiles);
}
}
else
{
std::cerr << "Can not find CMakeLists.txt in " << currentDir.c_str()
<< std::endl;
}
}
// Write a DSW file to the stream
void cmDSWMakefile::WriteDSWFile(std::ostream& fout)
{
// Write out the header for a DSW file
this->WriteDSWHeader(fout);
// Create an array of dsp files for the project
std::vector<cmDSPMakefile*> dspfiles;
// loop over all the subdirectories for the DSW file,
// and find all sub directory projects
for(std::vector<std::string>::iterator j = m_SubDirectories.begin();
j != m_SubDirectories.end(); ++j)
{
this->FindAllCMakeListsFiles(j->c_str(), dspfiles);
}
// For each DSP file created insert them into the DSW file
for(std::vector<cmDSPMakefile*>::iterator k = dspfiles.begin();
k != dspfiles.end(); ++k)
{
// Get the directory for the dsp file, it comes
// from the source, so it has the source path which needs
// to be removed as this may be built in a different directory
// than the source
std::string dir = (*k)->GetCurrentDirectory();
// Get the home directory with the trailing slash
std::string homedir = this->GetHomeDirectory();
homedir += "/";
// make the directory relative by removing the home directory part
cmSystemTools::ReplaceString(dir, homedir.c_str(), "");
// Get the list of create dsp files from the cmDSPMakefile, more
// than one dsp could have been created per input CMakeLists.txt file
std::vector<std::string> dspnames = (*k)->GetCreatedProjectNames();
std::cerr << "Create dsp for "
<< dspnames.size()
<< " number of dsp files in " << dir << std::endl;
for(std::vector<std::string>::iterator si = dspnames.begin();
si != dspnames.end(); ++si)
{
// Write the project into the DSW file
this->WriteProject(fout, si->c_str(), dir.c_str());
}
// delete the cmDSPMakefile object once done with it to avoid
// leaks
delete *k;
}
// Write the footer for the DSW file
this->WriteDSWFooter(fout);
}
void cmDSWMakefile::WriteProject(std::ostream& fout,
const char* dspname,
const char* dir)
const char* dspname,
const char* dir)
{
fout << "###############################################################################\n\n";
fout << "Project: \"" << dspname << "\"="

View File

@ -24,6 +24,7 @@
#include "cmMakefile.h"
#include <vector>
class cmDSPMakefile;
class cmDSWMakefile : public cmMakefile
@ -31,9 +32,10 @@ class cmDSWMakefile : public cmMakefile
public:
virtual void OutputDSWFile();
private:
void FindAllCMakeListsFiles(const char* subdir,
std::vector<cmDSPMakefile*>&);
void WriteDSWFile(std::ostream& fout);
void WriteDSWHeader(std::ostream& fout);
std::vector<std::string> CreateDSPFile(const char* dir);
void WriteProject(std::ostream& fout,
const char* name, const char* path);
void WriteDSWFooter(std::ostream& fout);

View File

@ -2,12 +2,15 @@
#pragma warning ( disable : 4786 )
#endif
#include "cmDSWMakefile.h"
#include "cmDSPBuilder.h"
#include "cmSystemTools.h"
#include "cmDSPMakefile.h"
#include <iostream>
#include <fstream>
#include <windows.h>
// microsoft nonsense
#undef GetCurrentDirectory
#undef SetCurrentDirectory
// virtual override, ouput the makefile
void cmDSWMakefile::OutputDSWFile()
@ -27,80 +30,139 @@ void cmDSWMakefile::OutputDSWFile()
MessageBox(0, m_OutputDirectory.c_str(), 0, MB_OK);
}
}
std::string fname;
fname = m_OutputDirectory;
fname += "/";
fname += this->m_LibraryName;
fname += ".dsw";
std::cerr << "writting dsw file " << fname.c_str() << std::endl;
std::ofstream fout(fname.c_str());
if(!fout)
{
std::cerr << "Error can not open " << fname.c_str() << " for write" << std::endl;
std::cerr << "Error can not open "
<< fname.c_str() << " for write" << std::endl;
return;
}
this->WriteDSWFile(fout);
}
void cmDSWMakefile::WriteDSWFile(std::ostream& fout)
// ------------------------------------------------
// Recursive function to find all the CMakeLists.txt files
// in a project. As each file is read in, any directories in
// the SUBDIR variable are also passed back to this function.
// The result is a vector of cmDSPMakefile objects, one for
// each directory with a CMakeLists.txt file
//
void cmDSWMakefile::FindAllCMakeListsFiles(const char* subdir,
std::vector<cmDSPMakefile*>& makefiles)
{
this->WriteDSWHeader(fout);
for(std::vector<std::string>::iterator i = m_SubDirectories.begin();
i != m_SubDirectories.end(); ++i)
{
const char* dir = (*i).c_str();
std::vector<std::string> dspnames = this->CreateDSPFile(dir);
std::cerr << "Create dsp for " << dspnames.size() << " number of dsp files in " << dir << std::endl;
for(std::vector<std::string>::iterator si = dspnames.begin();
si != dspnames.end(); ++si)
{
std::string dspname = *si;
std::cerr << "Create dsp for " << (*si).c_str() << std::endl;
if(dspname == "")
{
std::cerr << "Project name not found in " << dir << "/CMakeLists.txt" << std::endl;
std::cerr << "Skipping Project " << std::endl;
}
else
{
std::string subdir = "./";
subdir += dir;
this->WriteProject(fout, dspname.c_str(), subdir.c_str());
}
}
}
this->WriteDSWFooter(fout);
}
std::vector<std::string> cmDSWMakefile::CreateDSPFile(const char* subdir)
{
#undef GetCurrentDirectory
std::string currentDir = this->GetCurrentDirectory();
currentDir += "/";
currentDir += subdir;
cmDSPBuilder dsp;
dsp.SetOutputHomeDirectory(this->GetOutputDirectory());
dsp.SetHomeDirectory(this->GetHomeDirectory());
dsp.SetMakefileDirectory(currentDir.c_str());
std::string outdir = m_OutputDirectory;
outdir += "/";
outdir += subdir;
dsp.SetOutputDirectory(outdir.c_str());
currentDir += "/";
currentDir += "CMakeLists.txt";
dsp.SetInputMakefilePath(currentDir.c_str());
dsp.CreateDSPFile();
return dsp.GetCreatedProjectNames();
// CMakeLists.txt exits in the subdirectory
// then create a cmDSPMakefile for it
if(cmSystemTools::FileExists(currentDir.c_str()))
{
// Create a new cmDSPMakefile to read the currentDir CMakeLists.txt file
cmDSPMakefile* dsp = new cmDSPMakefile;
// add it to the vector
makefiles.push_back(dsp);
// Set up the file with the current context
dsp->SetOutputHomeDirectory(this->GetOutputDirectory());
dsp->SetHomeDirectory(this->GetHomeDirectory());
// set the current directory in the Source as a full
// path
std::string currentDir = this->GetCurrentDirectory();
currentDir += "/";
currentDir += subdir;
dsp->SetCurrentDirectory(currentDir.c_str());
// Parse the CMakeLists.txt file
currentDir += "/CMakeLists.txt";
dsp->ReadMakefile(currentDir.c_str());
// Set the output directory which may be different than the source
std::string outdir = m_OutputDirectory;
outdir += "/";
outdir += subdir;
dsp->SetOutputDirectory(outdir.c_str());
// Create the DSP file
dsp->OutputDSPFile();
// Look at any sub directories parsed (SUBDIRS) and
// recurse into them
const std::vector<std::string>& subdirs = dsp->GetSubDirectories();
for(std::vector<std::string>::const_iterator i = subdirs.begin();
i != subdirs.end(); ++i)
{
// append the subdirectory to the current directoy subdir
std::string nextDir = subdir;
nextDir += "/";
nextDir += i->c_str();
// recurse into nextDir
this->FindAllCMakeListsFiles(nextDir.c_str(),
makefiles);
}
}
else
{
std::cerr << "Can not find CMakeLists.txt in " << currentDir.c_str()
<< std::endl;
}
}
// Write a DSW file to the stream
void cmDSWMakefile::WriteDSWFile(std::ostream& fout)
{
// Write out the header for a DSW file
this->WriteDSWHeader(fout);
// Create an array of dsp files for the project
std::vector<cmDSPMakefile*> dspfiles;
// loop over all the subdirectories for the DSW file,
// and find all sub directory projects
for(std::vector<std::string>::iterator j = m_SubDirectories.begin();
j != m_SubDirectories.end(); ++j)
{
this->FindAllCMakeListsFiles(j->c_str(), dspfiles);
}
// For each DSP file created insert them into the DSW file
for(std::vector<cmDSPMakefile*>::iterator k = dspfiles.begin();
k != dspfiles.end(); ++k)
{
// Get the directory for the dsp file, it comes
// from the source, so it has the source path which needs
// to be removed as this may be built in a different directory
// than the source
std::string dir = (*k)->GetCurrentDirectory();
// Get the home directory with the trailing slash
std::string homedir = this->GetHomeDirectory();
homedir += "/";
// make the directory relative by removing the home directory part
cmSystemTools::ReplaceString(dir, homedir.c_str(), "");
// Get the list of create dsp files from the cmDSPMakefile, more
// than one dsp could have been created per input CMakeLists.txt file
std::vector<std::string> dspnames = (*k)->GetCreatedProjectNames();
std::cerr << "Create dsp for "
<< dspnames.size()
<< " number of dsp files in " << dir << std::endl;
for(std::vector<std::string>::iterator si = dspnames.begin();
si != dspnames.end(); ++si)
{
// Write the project into the DSW file
this->WriteProject(fout, si->c_str(), dir.c_str());
}
// delete the cmDSPMakefile object once done with it to avoid
// leaks
delete *k;
}
// Write the footer for the DSW file
this->WriteDSWFooter(fout);
}
void cmDSWMakefile::WriteProject(std::ostream& fout,
const char* dspname,
const char* dir)
const char* dspname,
const char* dir)
{
fout << "###############################################################################\n\n";
fout << "Project: \"" << dspname << "\"="

View File

@ -24,6 +24,7 @@
#include "cmMakefile.h"
#include <vector>
class cmDSPMakefile;
class cmDSWMakefile : public cmMakefile
@ -31,9 +32,10 @@ class cmDSWMakefile : public cmMakefile
public:
virtual void OutputDSWFile();
private:
void FindAllCMakeListsFiles(const char* subdir,
std::vector<cmDSPMakefile*>&);
void WriteDSWFile(std::ostream& fout);
void WriteDSWHeader(std::ostream& fout);
std::vector<std::string> CreateDSPFile(const char* dir);
void WriteProject(std::ostream& fout,
const char* name, const char* path);
void WriteDSWFooter(std::ostream& fout);

View File

@ -2,23 +2,27 @@
#pragma warning ( disable : 4786 )
#endif
#include "cmMakeDepend.h"
#include "cmSystemTools.h"
#include <fstream>
#include <iostream>
#include <algorithm>
#include <functional>
void cmMakeDepend::SetIncludeRegularExpression(const char* prefix)
{
m_IncludeFileRegularExpression.compile(prefix);
}
cmMakeDepend::cmMakeDepend()
{
m_Verbose = false;
m_IncludeFileRegularExpression.compile("^itk|^vtk|^vnl|^vcl|^f2c");
}
// only files matching this regular expression with be considered
void cmMakeDepend::SetIncludeRegularExpression(const char* prefix)
{
m_IncludeFileRegularExpression.compile(prefix);
}
cmMakeDepend::~cmMakeDepend()
{
for(DependArray::iterator i = m_DependInformation.begin();
@ -32,11 +36,25 @@ cmMakeDepend::~cmMakeDepend()
// Set the makefile that depends will be made from.
// The pointer is kept so the cmClassFile array can
// be updated with the depend information.
// be updated with the depend information in the cmMakefile.
void cmMakeDepend::SetMakefile(cmMakefile* makefile)
{
m_Makefile = makefile;
// Now extract any include paths from the makefile flags
cmCollectFlags& flags = m_Makefile->GetBuildFlags();
std::vector<std::string>& includes = flags.GetIncludeDirectories();
std::vector<std::string>::iterator j;
for(j = includes.begin(); j != includes.end(); ++j)
{
cmSystemTools::ReplaceString(*j, "${CMAKE_CONFIG_DIR}",
m_Makefile->GetOutputHomeDirectory() );
cmSystemTools::ReplaceString(*j, "${srcdir}",
m_Makefile->GetHomeDirectory() );
this->AddSearchPath(j->c_str());
}
// Now create cmDependInformation objects for files in the directory
int index = 0;
std::vector<cmClassFile>::iterator i = makefile->m_Classes.begin();
while(i != makefile->m_Classes.end())
@ -49,7 +67,6 @@ void cmMakeDepend::SetMakefile(cmMakefile* makefile)
info->m_IncludeName = (*i).m_FullPath;
m_DependInformation.push_back(info);
info->m_ClassFileIndex = index;
}
++i;
index++;
@ -195,6 +212,9 @@ int cmMakeDepend::FindInformation(const char* fname)
}
cmDependInformation* newinfo = new cmDependInformation;
newinfo->m_FullPath = this->FullPath(fname);
// Add the directory where this file was found to the search path
// may have been foo/bar.h, but bar may include files from the foo
// directory without the foo prefix
this->AddFileToSearchPath(newinfo->m_FullPath.c_str());
newinfo->m_IncludeName = fname;
m_DependInformation.push_back(newinfo);
@ -204,13 +224,15 @@ int cmMakeDepend::FindInformation(const char* fname)
// remove duplicate indices from the depend information
void cmDependInformation::RemoveDuplicateIndices()
{
// sort the array
std::sort(m_Indices.begin(), m_Indices.end(), std::less<int>());
// remove duplicates
std::vector<int>::iterator new_end =
std::unique(m_Indices.begin(), m_Indices.end());
m_Indices.erase(new_end, m_Indices.end());
}
// add the depend information from info to this
// add the depend information from info to the m_Indices varible of this class.
void cmDependInformation::MergeInfo(cmDependInformation* info)
{
std::vector<int>::iterator i = info->m_Indices.begin();
@ -226,19 +248,19 @@ std::string cmMakeDepend::FullPath(const char* fname)
for(std::vector<std::string>::iterator i = m_IncludeDirectories.begin();
i != m_IncludeDirectories.end(); ++i)
{
if(cmFileExists(fname))
if(cmSystemTools::FileExists(fname))
{
return std::string(fname);
}
std::string path = *i;
path = path + "/";
path = path + fname;
if(cmFileExists(path.c_str()))
if(cmSystemTools::FileExists(path.c_str()))
{
return path;
}
}
std::cerr << "File not found " << fname << std::endl;
std::cerr << "Depend: File not found " << fname << std::endl;
return std::string(fname);
}

View File

@ -4,39 +4,11 @@
#include "cmMakefile.h"
#include "cmClassFile.h"
#include "cmDirectory.h"
#include "cmSystemTools.h"
#include <fstream>
#include <iostream>
// remove extra spaces and the "\" character from the name
// of the class as it is in the CMakeLists.txt
inline std::string CleanUpName(const char* name)
{
std::string className = name;
size_t i =0;
while(className[i] == ' ')
{
i++;
}
if(i)
{
className = className.substr(i, className.size());
}
size_t pos = className.find('\\');
if(pos != std::string::npos)
{
className = className.substr(0, pos);
}
pos = className.find(' ');
if(pos != std::string::npos)
{
className = className.substr(0, pos);
}
return className;
}
// default is not to be building executables
cmMakefile::cmMakefile()
{
@ -55,7 +27,10 @@ void cmMakefile::Print()
bool cmMakefile::ReadMakefile(const char* filename)
{
std::cerr << "reading makefile " << filename << std::endl;
m_BuildFlags.SetSourceHomeDirectory(this->GetHomeDirectory());
m_BuildFlags.SetStartDirectory(this->GetCurrentDirectory());
m_BuildFlags.ParseDirectories();
std::ifstream fin(filename);
if(!fin)
{
@ -106,7 +81,7 @@ bool cmMakefile::ReadMakefile(const char* filename)
{
if(line.find("\\") != std::string::npos)
{
this->ReadSubdirs(fin);
cmSystemTools::ReadList(m_SubDirectories, fin);
}
}
else if(line.find("EXECUTABLES") != std::string::npos)
@ -177,7 +152,7 @@ void cmMakefile::ReadClasses(std::ifstream& fin,
done = true;
}
// remove extra spaces and \ from the class name
classname = CleanUpName(classname.c_str());
classname = cmSystemTools::CleanUpName(classname.c_str());
// if this is not an abstract list then add new class
// to the list of classes in this makefile
@ -204,6 +179,9 @@ void cmMakefile::ReadClasses(std::ifstream& fin,
}
}
// Find all of the files in dir as specified from this line:
// TEMPLATE_INSTANCE_DIRECTORY = dir
// Add all the files to the m_Classes array.
void cmMakefile::ReadTemplateInstanceDirectory(std::string& line)
{
@ -211,7 +189,7 @@ void cmMakefile::ReadTemplateInstanceDirectory(std::string& line)
if(start != std::string::npos)
{
std::string dirname = line.substr(start+1, line.size());
dirname = CleanUpName(dirname.c_str());
dirname = cmSystemTools::CleanUpName(dirname.c_str());
std::string tdir = this->GetCurrentDirectory();
tdir += "/";
tdir += dirname;
@ -250,28 +228,3 @@ void cmMakefile::ReadTemplateInstanceDirectory(std::string& line)
}
// Read a list of subdirectories from the stream
void cmMakefile::ReadSubdirs(std::ifstream& fin)
{
char inbuffer[2048];
bool done = false;
while (!done)
{
// read a line from the makefile
fin.getline(inbuffer, 2047);
// convert to a string class
std::string dir = inbuffer;
// if the line does not end in \ then we are at the
// end of the list
if(dir.find('\\') == std::string::npos)
{
done = true;
}
// remove extra spaces and \ from the class name
dir = CleanUpName(dir.c_str());
m_SubDirectories.push_back(dir);
}
}

View File

@ -14,7 +14,8 @@
=========================================================================*/
/**
* cmMakefile
* cmMakefile - used to parse and store the contents of a
* CMakeLists.txt makefile in memory.
*/
#ifndef cmMakefile_h
#define cmMakefile_h
@ -23,6 +24,7 @@
#endif
#include "cmClassFile.h"
#include "cmCollectFlags.h"
#include <vector>
#include <fstream>
#include <iostream>
@ -82,10 +84,17 @@ public:
{
return m_OutputHomeDirectory.c_str();
}
cmCollectFlags& GetBuildFlags()
{
return m_BuildFlags;
}
const std::vector<std::string>& GetSubDirectories()
{
return m_SubDirectories;
}
private:
void ReadTemplateInstanceDirectory(std::string&);
void ReadSubdirs(std::ifstream& fin);
void ReadClasses(std::ifstream& fin, bool t);
friend class cmMakeDepend; // make depend needs direct access
// to the m_Classes array
@ -99,7 +108,8 @@ protected:
std::string m_LibraryName; // library name
std::vector<cmClassFile> m_Classes; // list of classes in makefile
std::vector<std::string> m_SubDirectories; // list of sub directories
std::vector<std::string> m_MakeVerbatim; // list of sub directories
std::vector<std::string> m_MakeVerbatim; // lines copied from input file
cmCollectFlags m_BuildFlags;
};

View File

@ -1,46 +0,0 @@
#include "cmPCBuilder.h"
#include "cmMakefile.h"
cmPCBuilder::cmPCBuilder()
{
}
// Delete the m_Makefile
cmPCBuilder::~cmPCBuilder()
{
}
// Read in the given makefile
void cmPCBuilder::SetInputMakefilePath(const char* mfile)
{
if(!GetMakefile()->ReadMakefile(mfile))
{
std::cerr << "Error can not open " << mfile << " for input " << std::endl;
abort();
}
}
void cmPCBuilder::SetHomeDirectory(const char* dir)
{
GetMakefile()->SetHomeDirectory(dir);
}
void cmPCBuilder::SetMakefileDirectory(const char* dir)
{
GetMakefile()->SetCurrentDirectory(dir);
}
void cmPCBuilder::SetOutputDirectory(const char* dir)
{
GetMakefile()->SetOutputDirectory(dir);
}
void cmPCBuilder::SetOutputHomeDirectory(const char* dir)
{
GetMakefile()->SetOutputHomeDirectory(dir);
}

View File

@ -1,43 +0,0 @@
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: $RCSfile$
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 2000 National Library of Medicine
All rights reserved.
See COPYRIGHT.txt for copyright details.
=========================================================================*/
/**
* cmPCBuilder
*/
#ifndef __cmPCBuilder_h
#define __cmPCBuilder_h
class cmMakefile;
/**
* cmPCBuilder is a supper class used for creating a build
* file for PC's. This class can parse an cm Makefile.in and
* extract the classes that need to be compiled.
*/
class cmPCBuilder
{
public:
cmPCBuilder();
~cmPCBuilder();
virtual cmMakefile* GetMakefile() = 0;
void SetInputMakefilePath(const char*);
void SetHomeDirectory(const char*);
void SetMakefileDirectory(const char*);
void SetOutputDirectory(const char*);
void SetOutputHomeDirectory(const char*);
};
#endif

View File

@ -1,7 +1,52 @@
#include "cmSystemTools.h"
#include <direct.h>
#include "errno.h"
#include <sys/stat.h>
#ifdef _MSC_VER
#include <windows.h>
#include <direct.h>
inline int Mkdir(const char* dir)
{
return _mkdir(dir);
}
#else
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
inline int Mkdir(const char* dir)
{
return mkdir(dir, 00700);
}
#endif
// remove extra spaces and the "\" character from the name
// of the class as it is in the CMakeLists.txt
std::string cmSystemTools::CleanUpName(const char* name)
{
std::string className = name;
size_t i =0;
while(className[i] == ' ')
{
i++;
}
if(i)
{
className = className.substr(i, className.size());
}
size_t pos = className.find('\\');
if(pos != std::string::npos)
{
className = className.substr(0, pos);
}
pos = className.find(' ');
if(pos != std::string::npos)
{
className = className.substr(0, pos);
}
return className;
}
bool cmSystemTools::MakeDirectory(const char* path)
{
@ -21,10 +66,10 @@ bool cmSystemTools::MakeDirectory(const char* path)
while((pos = dir.find('/', pos)) != std::string::npos)
{
std::string topdir = dir.substr(0, pos);
_mkdir(topdir.c_str());
Mkdir(topdir.c_str());
pos++;
}
if(_mkdir(path) != 0)
if(Mkdir(path) != 0)
{
// if it is some other error besides directory exists
// then return false
@ -36,6 +81,9 @@ bool cmSystemTools::MakeDirectory(const char* path)
return true;
}
// replace replace with with as many times as it shows up in source.
// write the result into source.
void cmSystemTools::ReplaceString(std::string& source,
const char* replace,
const char* with)
@ -52,3 +100,57 @@ void cmSystemTools::ReplaceString(std::string& source,
start = source.find(replace, start + lengthReplace );
}
}
// return true if the file exists
bool cmSystemTools::FileExists(const char* filename)
{
struct stat fs;
if (stat(filename, &fs) != 0)
{
return false;
}
else
{
return true;
}
}
// Read a list from a CMakeLists.txt file open stream.
// assume the stream has just read "VAR = \"
// read until there is not a "\" at the end of the line.
void cmSystemTools::ReadList(std::vector<std::string>& stringList,
std::ifstream& fin)
{
char inbuffer[2048];
bool done = false;
while ( !done )
{
fin.getline(inbuffer, 2047 );
std::string inname = inbuffer;
if(inname.find('\\') == std::string::npos)
{
done = true;
}
if(inname.size())
{
stringList.push_back(cmSystemTools::CleanUpName(inname.c_str()));
}
}
}
// convert windows slashes to unix slashes \ with /
void cmSystemTools::ConvertToUnixSlashes(std::string& path)
{
std::string::size_type pos = path.find('\\');
while(pos != std::string::npos)
{
path[pos] = '/';
pos = path.find('\\');
}
// remove any trailing slash
if(path[path.size()-1] == '/')
{
path = path.substr(0, path.size()-1);
}
}

View File

@ -14,23 +14,56 @@
=========================================================================*/
/**
* cmWindowsTools
* cmSystemTools - a collection of useful functions for CMake.
*/
#ifndef cmWindowsTools_h
#define cmWindowsTools_h
#ifndef cmSystemTools_h
#define cmSystemTools_h
#ifdef _MSC_VER
#pragma warning ( disable : 4786 )
#endif
#include <string>
#include <vector>
#include <fstream>
class cmSystemTools
{
public:
/**
* Make a new directory if it is not there. This function
* can make a full path even if none of the directories existed
* prior to calling this function.
*/
static bool MakeDirectory(const char* path);
/**
* Replace replace all occurances of the string in in
* souce string.
*/
static void ReplaceString(std::string& source,
const char* replace,
const char* with);
/**
* Remove extra spaces and the trailing \ from a string.
*/
static std::string CleanUpName(const char* name);
/**
* Replace windows slashes with unix style slashes
*/
static void ConvertToUnixSlashes(std::string& path);
/**
* Return true if a file exists
*/
static bool FileExists(const char* filename);
/**
* Read a list from a file into the array of strings.
* This function assumes that the first line of the
* list has been read. For example: NAME = \ was already
* read in. The reading stops when there are no more
* continuation characters.
*/
static void ReadList(std::vector<std::string>& stringList,
std::ifstream& fin);
};

View File

@ -53,7 +53,14 @@ inline std::string FixDirectoryName(const char* dir)
return s;
}
// output the makefile to the named file
// This is where CMakeTargets.make is generated
// This function ouputs the following:
// 1. Include flags for the compiler
// 2. List of .o files that need to be compiled
// 3. Rules to build executables including -l and -L options
// 4. Rules to build in sub directories
// 5. The name of the library being built, if it is a library
void cmUnixMakefile::OutputMakefile(const char* file)
{
std::ofstream fout(file);
@ -62,8 +69,28 @@ void cmUnixMakefile::OutputMakefile(const char* file)
std::cerr << "Error can not open " << file << " for write" << std::endl;
return;
}
// Output Include paths
fout << "INCLUDE_FLAGS = ";
std::vector<std::string>& includes = m_BuildFlags.GetIncludeDirectories();
std::vector<std::string>::iterator i;
for(i = includes.begin(); i != includes.end(); ++i)
{
std::string include = *i;
fout << "-I" << i->c_str() << " ";
}
fout << " ${LOCAL_INCLUDE_FLAGS} ";
fout << "\n";
// see if there are files to compile in this makefile
// These are used for both libraries and executables
if(m_Classes.size() )
{
// Ouput Library name if there are SRC_OBJS
if(strlen(this->GetLibraryName()) > 0)
{
fout << "ME = " << this->GetLibraryName() << "\n\n";
fout << "BUILD_LIB_FILE = lib${ME}${ITK_LIB_EXT}\n\n";
}
// Output SRC_OBJ list for all the classes to be compiled
fout << "SRC_OBJ = \\\n";
for(int i = 0; i < m_Classes.size(); i++)
{
@ -82,20 +109,41 @@ void cmUnixMakefile::OutputMakefile(const char* file)
}
fout << "\n";
}
if(strlen(this->GetLibraryName()) > 0)
{
fout << "ME = " << this->GetLibraryName() << "\n\n";
fout << "BUILD_LIB_FILE = lib${ME}${ITK_LIB_EXT}\n\n";
}
// Ouput user make text embeded in the input file
for(int i =0; i < m_MakeVerbatim.size(); i++)
{
fout << m_MakeVerbatim[i] << "\n";
}
fout << "\n\n";
// Output rules for building executables
if( m_Executables )
{
// collect all the flags needed for linking libraries
std::string linkLibs;
std::vector<std::string>::iterator j;
std::vector<std::string>& libdirs = m_BuildFlags.GetLinkDirectories();
for(j = libdirs.begin(); j != libdirs.end(); ++j)
{
linkLibs += "-L";
linkLibs += *j;
linkLibs += " ";
}
std::vector<std::string>& libs = m_BuildFlags.GetLinkLibraries();
for(j = libs.begin(); j != libs.end(); ++j)
{
linkLibs += "-l";
linkLibs += *j;
linkLibs += " ";
}
std::vector<std::string>& libsUnix = m_BuildFlags.GetLinkLibrariesUnix();
for(j = libsUnix.begin(); j != libsUnix.end(); ++j)
{
linkLibs += *j;
linkLibs += " ";
}
linkLibs += " ${LOCAL_LINK_FLAGS} ";
// Now create rules for all of the executables to be built
for(int i = 0; i < m_Classes.size(); i++)
{
if(!m_Classes[i].m_AbstractClass && !m_Classes[i].m_HeaderFileOnly)
@ -103,10 +151,13 @@ void cmUnixMakefile::OutputMakefile(const char* file)
std::string DotO = m_Classes[i].m_ClassName;
DotO += ".o";
fout << m_Classes[i].m_ClassName << ": " << DotO << "\n";
fout << "\t ${CXX} ${CXX_FLAGS} " << DotO.c_str() << " -o $@ -L${CMAKE_OBJ_DIR}/Code/Common -lITKCommon \\\n"
<< "\t-L${CMAKE_OBJ_DIR}/Code/Insight3DParty/vxl -lITKNumerics -lm ${DL_LIBS}\n\n";
fout << "\t${CXX} ${CXX_FLAGS} "
<< DotO.c_str() << " "
<< linkLibs.c_str()
<< " -o $@ ""\n\n";
}
}
// ouput the list of executables
fout << "EXECUTABLES = \\\n";
for(int i = 0; i < m_Classes.size(); i++)
{
@ -122,7 +173,7 @@ void cmUnixMakefile::OutputMakefile(const char* file)
}
fout << "\n";
}
// Output Sub directory build rules
if( m_SubDirectories.size() )
{
fout << "SUBDIR_BUILD = \\\n";

View File

@ -25,7 +25,9 @@
class cmUnixMakefile : public cmMakefile
{
public:
// Write the makefile to the named file
/**
* Write the makefile to the named file
*/
void OutputMakefile(const char* file);
protected:
void OutputDepends(std::ostream&);

View File

@ -26,10 +26,16 @@
class cmWindowsConfigure
{
public:
/**
* Set the path to the top level of the source directory
*/
void SetWhereSource(const char* dir)
{
m_WhereSource = dir;
}
/**
* Set the path to the top level of the build directory
*/
void SetWhereBuild(const char* dir)
{
m_WhereBuild = dir;

View File

@ -25,8 +25,17 @@
class itkVC60Configure : public cmWindowsConfigure
{
public:
/**
* implement configure from parent
*/
virtual void Configure();
/**
* create the main itk configure file
*/
virtual void GenerateITKConfigHeader();
/**
* Create the vnl configure file
*/
virtual void GenerateVNLConfigHeader();
protected:
void CopyFileTo(const char* source,