ENH: CMake and configure now use SUBDIRS in CMakeLists.txt to find all the directories of the system.
This commit is contained in:
parent
e2ad65d3c2
commit
aa3ca2b432
|
@ -4,14 +4,14 @@
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# Include all variable settings
|
# 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.
|
# Include user-editable defines.
|
||||||
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_OBJ_DIR@/CMakeLocal.make@MAKEQUOTE@
|
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_CONFIG_DIR@/CMakeLocal.make@MAKEQUOTE@
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# Include General Build Rules
|
# Include General Build Rules
|
||||||
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_OBJ_DIR@/CMake/CMakeRules.make@MAKEQUOTE@
|
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_CONFIG_DIR@/CMake/CMakeRules.make@MAKEQUOTE@
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# include simple rules for building .o files
|
# include simple rules for building .o files from source files
|
||||||
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_OBJ_DIR@/CMake/CMakeSimpleRules.make@MAKEQUOTE@
|
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_CONFIG_DIR@/CMake/CMakeSimpleRules.make@MAKEQUOTE@
|
||||||
|
|
||||||
#
|
#
|
||||||
# Makefile for
|
# 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
|
${CMAKE}: ${topdir}/CMake/Source/*.cxx ${topdir}/CMake/Source/*.h
|
||||||
cd @CMAKE_OBJ_DIR@/CMake/Source; ${MAKE} CMakeBuildTargets
|
cd ${CMAKE_CONFIG_DIR}/CMake/Source; ${MAKE} CMakeBuildTargets
|
||||||
|
|
||||||
depend: ${CMAKE}
|
depend: ${CMAKE}
|
||||||
${CMAKE} ${srcdir}/CMakeLists.txt -S${srcdir} -I${srcdir} ${INCLUDE_FLAGS}
|
${MAKE} -${MAKEFLAGS} CMakeTargets.make
|
||||||
|
|
||||||
|
|
||||||
clean: ${SUBDIR_CLEAN}
|
clean: ${SUBDIR_CLEAN}
|
||||||
rm -f ${SRC_OBJ} ${EXECUTABLES}
|
rm -f ${SRC_OBJ} ${EXECUTABLES}
|
||||||
|
|
||||||
CMakeTargets.make: ${CMAKE} ${srcdir}/CMakeLists.txt
|
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
|
# rules for the normal library
|
||||||
|
|
|
@ -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...
|
||||||
|
|
||||||
|
|
|
@ -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@
|
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
|
SHELL = /bin/sh
|
||||||
|
|
||||||
CMAKE_OBJ_DIR = ${CONFIG_DIR}
|
|
||||||
|
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
CFLAGS = @ITK_SHLIB_CFLAGS@ @ANSI_CFLAGS@
|
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
|
BIN_INSTALL_DIR = $(INSTALL_ROOT)$(exec_prefix)/bin
|
||||||
|
|
||||||
# set up the path to the rulesgen program
|
# 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}
|
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 **************
|
|
||||||
|
|
||||||
|
|
||||||
|
# C++ compile flags, INCLUDE_FLAGS is set in CMakeTargets.make which
|
||||||
# compile line flags
|
# is generated by CMakeBuildTargets, see CMake/Source
|
||||||
INCLUDE_FLAGS = -I. \
|
|
||||||
-I${CONFIG_DIR}/Code/Insight3DParty/vxl \
|
|
||||||
-I${CONFIG_DIR} \
|
|
||||||
-I${topdir}/Code/Common \
|
|
||||||
-I${topdir}/Code/Insight3DParty/vxl
|
|
||||||
|
|
||||||
CXX_FLAGS = ${CPPFLAGS} ${USER_CXXFLAGS} ${CXXFLAGS} \
|
CXX_FLAGS = ${CPPFLAGS} ${USER_CXXFLAGS} ${CXXFLAGS} \
|
||||||
${KIT_FLAGS} ${INCLUDE_FLAGS}
|
${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}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
VPATH = @srcdir@
|
VPATH = @srcdir@
|
||||||
|
|
||||||
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_OBJ_DIR@/CMake/CMakeMaster.make@MAKEQUOTE@
|
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_CONFIG_DIR@/CMake/CMakeMaster.make@MAKEQUOTE@
|
||||||
|
|
11
README
11
README
|
@ -32,9 +32,11 @@ CMakeBuildTargets -> Unix program to read CMakeLists.txt and generate CMakeT
|
||||||
makefile fragments:
|
makefile fragments:
|
||||||
CMakeMaster.make -> main file to be included by makefiles
|
CMakeMaster.make -> main file to be included by makefiles
|
||||||
CMakeVariables.make -> all make varibles are set in this file
|
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
|
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
|
MakefileTemplate.make -> master makefile template used by configure to generate Makefiles
|
||||||
|
|
||||||
Unix install:
|
Unix install:
|
||||||
|
@ -50,7 +52,6 @@ make
|
||||||
|
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
Fix cmUnixMakefile.cxx and cmDSPMakefile.cxx
|
configure stuff for windows should be a copy configure file
|
||||||
to read libraries and -I stuff from a config file
|
read in depend regular expression from a file
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,16 +16,21 @@ main(int ac, char** av)
|
||||||
for(int i =2; i < ac; i++)
|
for(int i =2; i < ac; i++)
|
||||||
{
|
{
|
||||||
std::string arg = av[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)
|
if(arg.find("-S",0) != std::string::npos)
|
||||||
{
|
{
|
||||||
std::string path = arg.substr(2);
|
std::string path = arg.substr(2);
|
||||||
mf->SetCurrentDirectory(path.c_str());
|
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]))
|
if(!mf->ReadMakefile(av[1]))
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
|
@ -11,9 +11,6 @@ Package=<5>
|
||||||
|
|
||||||
Package=<4>
|
Package=<4>
|
||||||
{{{
|
{{{
|
||||||
Begin Project Dependency
|
|
||||||
Project_Dep_Name pcbuilderCMD
|
|
||||||
End Project Dependency
|
|
||||||
Begin Project Dependency
|
Begin Project Dependency
|
||||||
Project_Dep_Name CMakeSetupCMD
|
Project_Dep_Name CMakeSetupCMD
|
||||||
End Project Dependency
|
End Project Dependency
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#include "cmDSWBuilder.h"
|
#include "cmDSWMakefile.h"
|
||||||
#include "cmDSPBuilder.h"
|
#include "cmDSPMakefile.h"
|
||||||
#include <iostream>
|
#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++)
|
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::string path = arg.substr(2);
|
||||||
std::cerr << "set makefile dir " << path.c_str() << std::endl;
|
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)
|
if(arg.find("-O",0) != std::string::npos)
|
||||||
{
|
{
|
||||||
|
@ -45,17 +45,17 @@ main(int ac, char** av)
|
||||||
std::string arg = av[2];
|
std::string arg = av[2];
|
||||||
if(arg.find("-DSP", 0) != std::string::npos)
|
if(arg.find("-DSP", 0) != std::string::npos)
|
||||||
{
|
{
|
||||||
cmDSPBuilder builder;
|
cmDSPMakefile builder;
|
||||||
SetArgs(builder, ac, av);
|
SetArgs(builder, ac, av);
|
||||||
builder.SetInputMakefilePath(av[1]);
|
builder.ReadMakefile(av[1]);
|
||||||
builder.CreateDSPFile();
|
builder.OutputDSPFile();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cmDSWBuilder builder;
|
cmDSWMakefile builder;
|
||||||
SetArgs(builder, ac, av);
|
SetArgs(builder, ac, av);
|
||||||
builder.SetInputMakefilePath(av[1]);
|
builder.ReadMakefile(av[1]);
|
||||||
builder.CreateDSWFile();
|
builder.OutputDSWFile();
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,6 +99,10 @@ SOURCE=.\cmClassFile.cxx
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\cmCollectFlags.cxx
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cmDirectory.cxx
|
SOURCE=.\cmDirectory.cxx
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source 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);
|
|
||||||
}
|
|
|
@ -108,6 +108,10 @@ SOURCE=..\cmClassFile.cxx
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\cmCollectFlags.cxx
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\cmDirectory.cxx
|
SOURCE=..\cmDirectory.cxx
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
@ -232,9 +236,5 @@ SOURCE=.\res\CMakeSetupDialog.ico
|
||||||
SOURCE=.\res\CMakeSetupDialog.rc2
|
SOURCE=.\res\CMakeSetupDialog.rc2
|
||||||
# End Source File
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\ReadMe.txt
|
|
||||||
# End Source File
|
|
||||||
# End Target
|
# End Target
|
||||||
# End Project
|
# End Project
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "CMakeSetup.h"
|
#include "CMakeSetup.h"
|
||||||
#include "CMakeSetupDialog.h"
|
#include "CMakeSetupDialog.h"
|
||||||
#include "../cmDSWBuilder.h"
|
#include "../cmDSWMakefile.h"
|
||||||
#include "../itkVC60Configure.h"
|
#include "../itkVC60Configure.h"
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
|
@ -232,19 +232,19 @@ void CMakeSetupDialog::OnOK()
|
||||||
config.SetWhereBuild(m_WhereBuild);
|
config.SetWhereBuild(m_WhereBuild);
|
||||||
config.Configure();
|
config.Configure();
|
||||||
|
|
||||||
cmDSWBuilder builder;
|
cmDSWMakefile builder;
|
||||||
// Set the ITK home directory
|
// Set the ITK home directory
|
||||||
builder.SetHomeDirectory(m_WhereSource);
|
builder.SetHomeDirectory(m_WhereSource);
|
||||||
// Set the CMakeLists.txt file
|
// Set the CMakeLists.txt file
|
||||||
CString makefileIn = m_WhereSource;
|
CString makefileIn = m_WhereSource;
|
||||||
makefileIn += "/CMakeLists.txt";
|
makefileIn += "/CMakeLists.txt";
|
||||||
builder.SetInputMakefilePath(makefileIn);
|
builder.ReadMakefile(makefileIn);
|
||||||
// Set the output directory
|
// Set the output directory
|
||||||
builder.SetOutputDirectory(m_WhereBuild);
|
builder.SetOutputDirectory(m_WhereBuild);
|
||||||
// set the directory which contains the CMakeLists.txt
|
// 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
|
// Create the master DSW file and all children dsp files for ITK
|
||||||
builder.CreateDSWFile();
|
builder.OutputDSWFile();
|
||||||
CDialog::OnOK();
|
CDialog::OnOK();
|
||||||
this->SaveToRegistry();
|
this->SaveToRegistry();
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,8 @@ VPATH = @srcdir@
|
||||||
# This will cause an infinite loop as it will add the
|
# This will cause an infinite loop as it will add the
|
||||||
# rule for changing into this directory
|
# rule for changing into this directory
|
||||||
|
|
||||||
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_OBJ_DIR@/CMake/CMakeVariables.make@MAKEQUOTE@
|
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_CONFIG_DIR@/CMake/CMakeVariables.make@MAKEQUOTE@
|
||||||
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_OBJ_DIR@/CMake/CMakeSimpleRules.make@MAKEQUOTE@
|
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_CONFIG_DIR@/CMake/CMakeSimpleRules.make@MAKEQUOTE@
|
||||||
|
|
||||||
OBJS = \
|
OBJS = \
|
||||||
cmClassFile.o \
|
cmClassFile.o \
|
||||||
|
@ -16,12 +16,16 @@ cmMakefile.o \
|
||||||
cmUnixMakefile.o \
|
cmUnixMakefile.o \
|
||||||
cmMakeDepend.o \
|
cmMakeDepend.o \
|
||||||
cmRegularExpression.o \
|
cmRegularExpression.o \
|
||||||
CMakeBuildTargets.o
|
cmSystemTools.o \
|
||||||
|
CMakeBuildTargets.o \
|
||||||
|
cmCollectFlags.o
|
||||||
|
|
||||||
|
|
||||||
cmDirectory.o : cmDirectory.h cmDirectory.cxx
|
cmCollectFlags.o : cmCollectFlags.h cmCollectFlags.cxx cmSystemTools.h
|
||||||
cmClassFile.o : cmClassFile.h cmClassFile.cxx
|
cmSystemTools.o : cmSystemTools.h cmSystemTools.cxx cmSystemTools.h
|
||||||
cmMakefile.o : cmMakefile.h cmMakefile.cxx cmClassFile.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
|
cmUnixMakefile.o : cmUnixMakefile.h cmUnixMakefile.cxx cmMakefile.h cmClassFile.h
|
||||||
cmMakeDepend.o : cmMakeDepend.h cmMakeDepend.cxx cmMakefile.h cmClassFile.h cmRegularExpression.h
|
cmMakeDepend.o : cmMakeDepend.h cmMakeDepend.cxx cmMakefile.h cmClassFile.h cmRegularExpression.h
|
||||||
cmRegularExpression.o : cmRegularExpression.h cmRegularExpression.cxx
|
cmRegularExpression.o : cmRegularExpression.h cmRegularExpression.cxx
|
||||||
|
|
|
@ -2,23 +2,10 @@
|
||||||
#pragma warning ( disable : 4786 )
|
#pragma warning ( disable : 4786 )
|
||||||
#endif
|
#endif
|
||||||
#include "cmClassFile.h"
|
#include "cmClassFile.h"
|
||||||
#include <sys/stat.h>
|
#include "cmSystemTools.h"
|
||||||
#include <iostream>
|
#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.
|
// 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,
|
// 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;
|
pathname += m_ClassName;
|
||||||
std::string hname = pathname;
|
std::string hname = pathname;
|
||||||
hname += ".cxx";
|
hname += ".cxx";
|
||||||
if(cmFileExists(hname.c_str()))
|
if(cmSystemTools::FileExists(hname.c_str()))
|
||||||
{
|
{
|
||||||
m_HeaderFileOnly = false;
|
m_HeaderFileOnly = false;
|
||||||
m_FullPath = hname;
|
m_FullPath = hname;
|
||||||
|
@ -46,7 +33,7 @@ void cmClassFile::SetName(const char* name, const char* dir)
|
||||||
|
|
||||||
hname = pathname;
|
hname = pathname;
|
||||||
hname += ".c";
|
hname += ".c";
|
||||||
if(cmFileExists(hname.c_str()))
|
if(cmSystemTools::FileExists(hname.c_str()))
|
||||||
{
|
{
|
||||||
m_HeaderFileOnly = false;
|
m_HeaderFileOnly = false;
|
||||||
m_FullPath = hname;
|
m_FullPath = hname;
|
||||||
|
@ -54,13 +41,19 @@ void cmClassFile::SetName(const char* name, const char* dir)
|
||||||
}
|
}
|
||||||
hname = pathname;
|
hname = pathname;
|
||||||
hname += ".txx";
|
hname += ".txx";
|
||||||
if(cmFileExists(hname.c_str()))
|
if(cmSystemTools::FileExists(hname.c_str()))
|
||||||
{
|
{
|
||||||
m_HeaderFileOnly = false;
|
m_HeaderFileOnly = false;
|
||||||
m_FullPath = hname;
|
m_FullPath = hname;
|
||||||
return;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -22,19 +22,25 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
// helper function returns true if a file exits
|
|
||||||
bool cmFileExists(const char* filename);
|
|
||||||
|
|
||||||
struct cmClassFile
|
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);
|
void SetName(const char* name, const char* dir);
|
||||||
|
/**
|
||||||
|
* print the structure to cout
|
||||||
|
*/
|
||||||
void Print();
|
void Print();
|
||||||
|
|
||||||
bool m_AbstractClass;
|
bool m_AbstractClass; // is this an abstract class
|
||||||
bool m_HeaderFileOnly;
|
bool m_HeaderFileOnly; // is this file only a header file
|
||||||
std::string m_FullPath;
|
std::string m_FullPath; // full path to the file
|
||||||
std::string m_ClassName;
|
std::string m_ClassName; // class name
|
||||||
|
// list of files that this file depends on
|
||||||
std::vector<std::string> m_Depends;
|
std::vector<std::string> m_Depends;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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();
|
|
||||||
}
|
|
|
@ -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
|
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
#include "cmDSPMakefile.h"
|
#include "cmDSPMakefile.h"
|
||||||
#include "cmSystemTools.h"
|
#include "cmSystemTools.h"
|
||||||
|
#include "cmCollectFlags.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#undef GetCurrentDirectory
|
||||||
|
|
||||||
static void Die(const char* message)
|
static void Die(const char* message)
|
||||||
{
|
{
|
||||||
|
@ -13,28 +16,49 @@ static void Die(const char* message)
|
||||||
|
|
||||||
void cmDSPMakefile::OutputDSPFile()
|
void cmDSPMakefile::OutputDSPFile()
|
||||||
{
|
{
|
||||||
m_IncludeOptions = "/STACK:10000000 ";
|
std::vector<std::string>& includes = m_BuildFlags.GetIncludeDirectories();
|
||||||
m_IncludeOptions = "/I \"";
|
std::vector<std::string>::iterator i;
|
||||||
m_IncludeOptions += this->GetHomeDirectory();
|
for(i = includes.begin(); i != includes.end(); ++i)
|
||||||
m_IncludeOptions += "/Code/Common\" ";
|
{
|
||||||
|
std::string include = *i;
|
||||||
|
cmSystemTools::ReplaceString(include, "${CMAKE_CONFIG_DIR}",
|
||||||
|
this->GetOutputHomeDirectory() );
|
||||||
|
cmSystemTools::ReplaceString(include, "${srcdir}",
|
||||||
|
this->GetHomeDirectory() );
|
||||||
m_IncludeOptions += "/I \"";
|
m_IncludeOptions += "/I \"";
|
||||||
m_IncludeOptions += this->GetHomeDirectory();
|
m_IncludeOptions += include;
|
||||||
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_IncludeOptions += "\" ";
|
||||||
m_DebugLibraryOptions = " ITKCommon.lib ITKNumerics.lib ";
|
}
|
||||||
|
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 += " /LIBPATH:\"";
|
||||||
m_DebugLibraryOptions += this->GetOutputHomeDirectory();
|
m_DebugLibraryOptions += *i;
|
||||||
m_DebugLibraryOptions += "/Code/Common/Debug\" ";
|
cmSystemTools::ReplaceString(m_DebugLibraryOptions, "${CMAKE_CONFIG_DIR}",
|
||||||
m_DebugLibraryOptions += " /LIBPATH:\"";
|
this->GetOutputHomeDirectory() );
|
||||||
m_DebugLibraryOptions += this->GetOutputHomeDirectory();
|
if(i->find("Debug") == std::string::npos)
|
||||||
m_DebugLibraryOptions += "/Code/Insight3DParty/vxl/Debug\" ";
|
{
|
||||||
|
if(i->find("Release") == std::string::npos)
|
||||||
|
{
|
||||||
|
m_DebugLibraryOptions += "/Debug\" ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_DebugLibraryOptions += "/STACK:10000000 ";
|
||||||
m_ReleaseLibraryOptions = m_DebugLibraryOptions;
|
m_ReleaseLibraryOptions = m_DebugLibraryOptions;
|
||||||
cmSystemTools::ReplaceString(m_ReleaseLibraryOptions, "Debug", "Release");
|
cmSystemTools::ReplaceString(m_ReleaseLibraryOptions, "Debug", "Release");
|
||||||
// If the output directory is not the m_cmHomeDirectory
|
// 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);
|
std::string dspname = *(m_CreatedProjectNames.end()-1);
|
||||||
dspname += ".dsp";
|
dspname += ".dsp";
|
||||||
#undef GetCurrentDirectory
|
|
||||||
std::string makefileIn = this->GetCurrentDirectory();
|
std::string makefileIn = this->GetCurrentDirectory();
|
||||||
makefileIn += "/";
|
makefileIn += "/";
|
||||||
makefileIn += "CMakeLists.txt";
|
makefileIn += "CMakeLists.txt";
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
#include "cmDSPMakefile.h"
|
#include "cmDSPMakefile.h"
|
||||||
#include "cmSystemTools.h"
|
#include "cmSystemTools.h"
|
||||||
|
#include "cmCollectFlags.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#undef GetCurrentDirectory
|
||||||
|
|
||||||
static void Die(const char* message)
|
static void Die(const char* message)
|
||||||
{
|
{
|
||||||
|
@ -13,28 +16,49 @@ static void Die(const char* message)
|
||||||
|
|
||||||
void cmDSPMakefile::OutputDSPFile()
|
void cmDSPMakefile::OutputDSPFile()
|
||||||
{
|
{
|
||||||
m_IncludeOptions = "/STACK:10000000 ";
|
std::vector<std::string>& includes = m_BuildFlags.GetIncludeDirectories();
|
||||||
m_IncludeOptions = "/I \"";
|
std::vector<std::string>::iterator i;
|
||||||
m_IncludeOptions += this->GetHomeDirectory();
|
for(i = includes.begin(); i != includes.end(); ++i)
|
||||||
m_IncludeOptions += "/Code/Common\" ";
|
{
|
||||||
|
std::string include = *i;
|
||||||
|
cmSystemTools::ReplaceString(include, "${CMAKE_CONFIG_DIR}",
|
||||||
|
this->GetOutputHomeDirectory() );
|
||||||
|
cmSystemTools::ReplaceString(include, "${srcdir}",
|
||||||
|
this->GetHomeDirectory() );
|
||||||
m_IncludeOptions += "/I \"";
|
m_IncludeOptions += "/I \"";
|
||||||
m_IncludeOptions += this->GetHomeDirectory();
|
m_IncludeOptions += include;
|
||||||
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_IncludeOptions += "\" ";
|
||||||
m_DebugLibraryOptions = " ITKCommon.lib ITKNumerics.lib ";
|
}
|
||||||
|
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 += " /LIBPATH:\"";
|
||||||
m_DebugLibraryOptions += this->GetOutputHomeDirectory();
|
m_DebugLibraryOptions += *i;
|
||||||
m_DebugLibraryOptions += "/Code/Common/Debug\" ";
|
cmSystemTools::ReplaceString(m_DebugLibraryOptions, "${CMAKE_CONFIG_DIR}",
|
||||||
m_DebugLibraryOptions += " /LIBPATH:\"";
|
this->GetOutputHomeDirectory() );
|
||||||
m_DebugLibraryOptions += this->GetOutputHomeDirectory();
|
if(i->find("Debug") == std::string::npos)
|
||||||
m_DebugLibraryOptions += "/Code/Insight3DParty/vxl/Debug\" ";
|
{
|
||||||
|
if(i->find("Release") == std::string::npos)
|
||||||
|
{
|
||||||
|
m_DebugLibraryOptions += "/Debug\" ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_DebugLibraryOptions += "/STACK:10000000 ";
|
||||||
m_ReleaseLibraryOptions = m_DebugLibraryOptions;
|
m_ReleaseLibraryOptions = m_DebugLibraryOptions;
|
||||||
cmSystemTools::ReplaceString(m_ReleaseLibraryOptions, "Debug", "Release");
|
cmSystemTools::ReplaceString(m_ReleaseLibraryOptions, "Debug", "Release");
|
||||||
// If the output directory is not the m_cmHomeDirectory
|
// 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);
|
std::string dspname = *(m_CreatedProjectNames.end()-1);
|
||||||
dspname += ".dsp";
|
dspname += ".dsp";
|
||||||
#undef GetCurrentDirectory
|
|
||||||
std::string makefileIn = this->GetCurrentDirectory();
|
std::string makefileIn = this->GetCurrentDirectory();
|
||||||
makefileIn += "/";
|
makefileIn += "/";
|
||||||
makefileIn += "CMakeLists.txt";
|
makefileIn += "CMakeLists.txt";
|
||||||
|
|
|
@ -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();
|
|
||||||
}
|
|
|
@ -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
|
|
||||||
|
|
|
@ -2,12 +2,15 @@
|
||||||
#pragma warning ( disable : 4786 )
|
#pragma warning ( disable : 4786 )
|
||||||
#endif
|
#endif
|
||||||
#include "cmDSWMakefile.h"
|
#include "cmDSWMakefile.h"
|
||||||
#include "cmDSPBuilder.h"
|
|
||||||
#include "cmSystemTools.h"
|
#include "cmSystemTools.h"
|
||||||
|
#include "cmDSPMakefile.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
|
// microsoft nonsense
|
||||||
|
#undef GetCurrentDirectory
|
||||||
|
#undef SetCurrentDirectory
|
||||||
|
|
||||||
// virtual override, ouput the makefile
|
// virtual override, ouput the makefile
|
||||||
void cmDSWMakefile::OutputDSWFile()
|
void cmDSWMakefile::OutputDSWFile()
|
||||||
|
@ -27,74 +30,133 @@ void cmDSWMakefile::OutputDSWFile()
|
||||||
MessageBox(0, m_OutputDirectory.c_str(), 0, MB_OK);
|
MessageBox(0, m_OutputDirectory.c_str(), 0, MB_OK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::string fname;
|
std::string fname;
|
||||||
fname = m_OutputDirectory;
|
fname = m_OutputDirectory;
|
||||||
fname += "/";
|
fname += "/";
|
||||||
fname += this->m_LibraryName;
|
fname += this->m_LibraryName;
|
||||||
fname += ".dsw";
|
fname += ".dsw";
|
||||||
std::cerr << "writting dsw file " << fname.c_str() << std::endl;
|
std::cerr << "writting dsw file " << fname.c_str() << std::endl;
|
||||||
|
|
||||||
std::ofstream fout(fname.c_str());
|
std::ofstream fout(fname.c_str());
|
||||||
if(!fout)
|
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;
|
return;
|
||||||
}
|
}
|
||||||
this->WriteDSWFile(fout);
|
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();
|
std::string currentDir = this->GetCurrentDirectory();
|
||||||
currentDir += "/";
|
currentDir += "/";
|
||||||
currentDir += subdir;
|
currentDir += subdir;
|
||||||
cmDSPBuilder dsp;
|
currentDir += "/";
|
||||||
dsp.SetOutputHomeDirectory(this->GetOutputDirectory());
|
currentDir += "CMakeLists.txt";
|
||||||
dsp.SetHomeDirectory(this->GetHomeDirectory());
|
// CMakeLists.txt exits in the subdirectory
|
||||||
dsp.SetMakefileDirectory(currentDir.c_str());
|
// 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;
|
std::string outdir = m_OutputDirectory;
|
||||||
outdir += "/";
|
outdir += "/";
|
||||||
outdir += subdir;
|
outdir += subdir;
|
||||||
dsp.SetOutputDirectory(outdir.c_str());
|
dsp->SetOutputDirectory(outdir.c_str());
|
||||||
currentDir += "/";
|
// Create the DSP file
|
||||||
currentDir += "CMakeLists.txt";
|
dsp->OutputDSPFile();
|
||||||
dsp.SetInputMakefilePath(currentDir.c_str());
|
// Look at any sub directories parsed (SUBDIRS) and
|
||||||
dsp.CreateDSPFile();
|
// recurse into them
|
||||||
return dsp.GetCreatedProjectNames();
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
|
|
||||||
#include "cmMakefile.h"
|
#include "cmMakefile.h"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
class cmDSPMakefile;
|
||||||
|
|
||||||
|
|
||||||
class cmDSWMakefile : public cmMakefile
|
class cmDSWMakefile : public cmMakefile
|
||||||
|
@ -31,9 +32,10 @@ class cmDSWMakefile : public cmMakefile
|
||||||
public:
|
public:
|
||||||
virtual void OutputDSWFile();
|
virtual void OutputDSWFile();
|
||||||
private:
|
private:
|
||||||
|
void FindAllCMakeListsFiles(const char* subdir,
|
||||||
|
std::vector<cmDSPMakefile*>&);
|
||||||
void WriteDSWFile(std::ostream& fout);
|
void WriteDSWFile(std::ostream& fout);
|
||||||
void WriteDSWHeader(std::ostream& fout);
|
void WriteDSWHeader(std::ostream& fout);
|
||||||
std::vector<std::string> CreateDSPFile(const char* dir);
|
|
||||||
void WriteProject(std::ostream& fout,
|
void WriteProject(std::ostream& fout,
|
||||||
const char* name, const char* path);
|
const char* name, const char* path);
|
||||||
void WriteDSWFooter(std::ostream& fout);
|
void WriteDSWFooter(std::ostream& fout);
|
||||||
|
|
|
@ -2,12 +2,15 @@
|
||||||
#pragma warning ( disable : 4786 )
|
#pragma warning ( disable : 4786 )
|
||||||
#endif
|
#endif
|
||||||
#include "cmDSWMakefile.h"
|
#include "cmDSWMakefile.h"
|
||||||
#include "cmDSPBuilder.h"
|
|
||||||
#include "cmSystemTools.h"
|
#include "cmSystemTools.h"
|
||||||
|
#include "cmDSPMakefile.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
|
// microsoft nonsense
|
||||||
|
#undef GetCurrentDirectory
|
||||||
|
#undef SetCurrentDirectory
|
||||||
|
|
||||||
// virtual override, ouput the makefile
|
// virtual override, ouput the makefile
|
||||||
void cmDSWMakefile::OutputDSWFile()
|
void cmDSWMakefile::OutputDSWFile()
|
||||||
|
@ -27,74 +30,133 @@ void cmDSWMakefile::OutputDSWFile()
|
||||||
MessageBox(0, m_OutputDirectory.c_str(), 0, MB_OK);
|
MessageBox(0, m_OutputDirectory.c_str(), 0, MB_OK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::string fname;
|
std::string fname;
|
||||||
fname = m_OutputDirectory;
|
fname = m_OutputDirectory;
|
||||||
fname += "/";
|
fname += "/";
|
||||||
fname += this->m_LibraryName;
|
fname += this->m_LibraryName;
|
||||||
fname += ".dsw";
|
fname += ".dsw";
|
||||||
std::cerr << "writting dsw file " << fname.c_str() << std::endl;
|
std::cerr << "writting dsw file " << fname.c_str() << std::endl;
|
||||||
|
|
||||||
std::ofstream fout(fname.c_str());
|
std::ofstream fout(fname.c_str());
|
||||||
if(!fout)
|
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;
|
return;
|
||||||
}
|
}
|
||||||
this->WriteDSWFile(fout);
|
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();
|
std::string currentDir = this->GetCurrentDirectory();
|
||||||
currentDir += "/";
|
currentDir += "/";
|
||||||
currentDir += subdir;
|
currentDir += subdir;
|
||||||
cmDSPBuilder dsp;
|
currentDir += "/";
|
||||||
dsp.SetOutputHomeDirectory(this->GetOutputDirectory());
|
currentDir += "CMakeLists.txt";
|
||||||
dsp.SetHomeDirectory(this->GetHomeDirectory());
|
// CMakeLists.txt exits in the subdirectory
|
||||||
dsp.SetMakefileDirectory(currentDir.c_str());
|
// 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;
|
std::string outdir = m_OutputDirectory;
|
||||||
outdir += "/";
|
outdir += "/";
|
||||||
outdir += subdir;
|
outdir += subdir;
|
||||||
dsp.SetOutputDirectory(outdir.c_str());
|
dsp->SetOutputDirectory(outdir.c_str());
|
||||||
currentDir += "/";
|
// Create the DSP file
|
||||||
currentDir += "CMakeLists.txt";
|
dsp->OutputDSPFile();
|
||||||
dsp.SetInputMakefilePath(currentDir.c_str());
|
// Look at any sub directories parsed (SUBDIRS) and
|
||||||
dsp.CreateDSPFile();
|
// recurse into them
|
||||||
return dsp.GetCreatedProjectNames();
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
|
|
||||||
#include "cmMakefile.h"
|
#include "cmMakefile.h"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
class cmDSPMakefile;
|
||||||
|
|
||||||
|
|
||||||
class cmDSWMakefile : public cmMakefile
|
class cmDSWMakefile : public cmMakefile
|
||||||
|
@ -31,9 +32,10 @@ class cmDSWMakefile : public cmMakefile
|
||||||
public:
|
public:
|
||||||
virtual void OutputDSWFile();
|
virtual void OutputDSWFile();
|
||||||
private:
|
private:
|
||||||
|
void FindAllCMakeListsFiles(const char* subdir,
|
||||||
|
std::vector<cmDSPMakefile*>&);
|
||||||
void WriteDSWFile(std::ostream& fout);
|
void WriteDSWFile(std::ostream& fout);
|
||||||
void WriteDSWHeader(std::ostream& fout);
|
void WriteDSWHeader(std::ostream& fout);
|
||||||
std::vector<std::string> CreateDSPFile(const char* dir);
|
|
||||||
void WriteProject(std::ostream& fout,
|
void WriteProject(std::ostream& fout,
|
||||||
const char* name, const char* path);
|
const char* name, const char* path);
|
||||||
void WriteDSWFooter(std::ostream& fout);
|
void WriteDSWFooter(std::ostream& fout);
|
||||||
|
|
|
@ -2,23 +2,27 @@
|
||||||
#pragma warning ( disable : 4786 )
|
#pragma warning ( disable : 4786 )
|
||||||
#endif
|
#endif
|
||||||
#include "cmMakeDepend.h"
|
#include "cmMakeDepend.h"
|
||||||
|
#include "cmSystemTools.h"
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
|
|
||||||
void cmMakeDepend::SetIncludeRegularExpression(const char* prefix)
|
|
||||||
{
|
|
||||||
m_IncludeFileRegularExpression.compile(prefix);
|
|
||||||
}
|
|
||||||
|
|
||||||
cmMakeDepend::cmMakeDepend()
|
cmMakeDepend::cmMakeDepend()
|
||||||
{
|
{
|
||||||
m_Verbose = false;
|
m_Verbose = false;
|
||||||
m_IncludeFileRegularExpression.compile("^itk|^vtk|^vnl|^vcl|^f2c");
|
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()
|
cmMakeDepend::~cmMakeDepend()
|
||||||
{
|
{
|
||||||
for(DependArray::iterator i = m_DependInformation.begin();
|
for(DependArray::iterator i = m_DependInformation.begin();
|
||||||
|
@ -32,11 +36,25 @@ cmMakeDepend::~cmMakeDepend()
|
||||||
|
|
||||||
// Set the makefile that depends will be made from.
|
// Set the makefile that depends will be made from.
|
||||||
// The pointer is kept so the cmClassFile array can
|
// 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)
|
void cmMakeDepend::SetMakefile(cmMakefile* makefile)
|
||||||
{
|
{
|
||||||
m_Makefile = 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;
|
int index = 0;
|
||||||
std::vector<cmClassFile>::iterator i = makefile->m_Classes.begin();
|
std::vector<cmClassFile>::iterator i = makefile->m_Classes.begin();
|
||||||
while(i != makefile->m_Classes.end())
|
while(i != makefile->m_Classes.end())
|
||||||
|
@ -49,7 +67,6 @@ void cmMakeDepend::SetMakefile(cmMakefile* makefile)
|
||||||
info->m_IncludeName = (*i).m_FullPath;
|
info->m_IncludeName = (*i).m_FullPath;
|
||||||
m_DependInformation.push_back(info);
|
m_DependInformation.push_back(info);
|
||||||
info->m_ClassFileIndex = index;
|
info->m_ClassFileIndex = index;
|
||||||
|
|
||||||
}
|
}
|
||||||
++i;
|
++i;
|
||||||
index++;
|
index++;
|
||||||
|
@ -195,6 +212,9 @@ int cmMakeDepend::FindInformation(const char* fname)
|
||||||
}
|
}
|
||||||
cmDependInformation* newinfo = new cmDependInformation;
|
cmDependInformation* newinfo = new cmDependInformation;
|
||||||
newinfo->m_FullPath = this->FullPath(fname);
|
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());
|
this->AddFileToSearchPath(newinfo->m_FullPath.c_str());
|
||||||
newinfo->m_IncludeName = fname;
|
newinfo->m_IncludeName = fname;
|
||||||
m_DependInformation.push_back(newinfo);
|
m_DependInformation.push_back(newinfo);
|
||||||
|
@ -204,13 +224,15 @@ int cmMakeDepend::FindInformation(const char* fname)
|
||||||
// remove duplicate indices from the depend information
|
// remove duplicate indices from the depend information
|
||||||
void cmDependInformation::RemoveDuplicateIndices()
|
void cmDependInformation::RemoveDuplicateIndices()
|
||||||
{
|
{
|
||||||
|
// sort the array
|
||||||
std::sort(m_Indices.begin(), m_Indices.end(), std::less<int>());
|
std::sort(m_Indices.begin(), m_Indices.end(), std::less<int>());
|
||||||
|
// remove duplicates
|
||||||
std::vector<int>::iterator new_end =
|
std::vector<int>::iterator new_end =
|
||||||
std::unique(m_Indices.begin(), m_Indices.end());
|
std::unique(m_Indices.begin(), m_Indices.end());
|
||||||
m_Indices.erase(new_end, 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)
|
void cmDependInformation::MergeInfo(cmDependInformation* info)
|
||||||
{
|
{
|
||||||
std::vector<int>::iterator i = info->m_Indices.begin();
|
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();
|
for(std::vector<std::string>::iterator i = m_IncludeDirectories.begin();
|
||||||
i != m_IncludeDirectories.end(); ++i)
|
i != m_IncludeDirectories.end(); ++i)
|
||||||
{
|
{
|
||||||
if(cmFileExists(fname))
|
if(cmSystemTools::FileExists(fname))
|
||||||
{
|
{
|
||||||
return std::string(fname);
|
return std::string(fname);
|
||||||
}
|
}
|
||||||
std::string path = *i;
|
std::string path = *i;
|
||||||
path = path + "/";
|
path = path + "/";
|
||||||
path = path + fname;
|
path = path + fname;
|
||||||
if(cmFileExists(path.c_str()))
|
if(cmSystemTools::FileExists(path.c_str()))
|
||||||
{
|
{
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::cerr << "File not found " << fname << std::endl;
|
std::cerr << "Depend: File not found " << fname << std::endl;
|
||||||
return std::string(fname);
|
return std::string(fname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,39 +4,11 @@
|
||||||
#include "cmMakefile.h"
|
#include "cmMakefile.h"
|
||||||
#include "cmClassFile.h"
|
#include "cmClassFile.h"
|
||||||
#include "cmDirectory.h"
|
#include "cmDirectory.h"
|
||||||
|
#include "cmSystemTools.h"
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#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
|
// default is not to be building executables
|
||||||
cmMakefile::cmMakefile()
|
cmMakefile::cmMakefile()
|
||||||
{
|
{
|
||||||
|
@ -55,7 +27,10 @@ void cmMakefile::Print()
|
||||||
|
|
||||||
bool cmMakefile::ReadMakefile(const char* filename)
|
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);
|
std::ifstream fin(filename);
|
||||||
if(!fin)
|
if(!fin)
|
||||||
{
|
{
|
||||||
|
@ -106,7 +81,7 @@ bool cmMakefile::ReadMakefile(const char* filename)
|
||||||
{
|
{
|
||||||
if(line.find("\\") != std::string::npos)
|
if(line.find("\\") != std::string::npos)
|
||||||
{
|
{
|
||||||
this->ReadSubdirs(fin);
|
cmSystemTools::ReadList(m_SubDirectories, fin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(line.find("EXECUTABLES") != std::string::npos)
|
else if(line.find("EXECUTABLES") != std::string::npos)
|
||||||
|
@ -177,7 +152,7 @@ void cmMakefile::ReadClasses(std::ifstream& fin,
|
||||||
done = true;
|
done = true;
|
||||||
}
|
}
|
||||||
// remove extra spaces and \ from the class name
|
// 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
|
// if this is not an abstract list then add new class
|
||||||
// to the list of classes in this makefile
|
// 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)
|
void cmMakefile::ReadTemplateInstanceDirectory(std::string& line)
|
||||||
{
|
{
|
||||||
|
@ -211,7 +189,7 @@ void cmMakefile::ReadTemplateInstanceDirectory(std::string& line)
|
||||||
if(start != std::string::npos)
|
if(start != std::string::npos)
|
||||||
{
|
{
|
||||||
std::string dirname = line.substr(start+1, line.size());
|
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();
|
std::string tdir = this->GetCurrentDirectory();
|
||||||
tdir += "/";
|
tdir += "/";
|
||||||
tdir += dirname;
|
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,8 @@
|
||||||
|
|
||||||
=========================================================================*/
|
=========================================================================*/
|
||||||
/**
|
/**
|
||||||
* cmMakefile
|
* cmMakefile - used to parse and store the contents of a
|
||||||
|
* CMakeLists.txt makefile in memory.
|
||||||
*/
|
*/
|
||||||
#ifndef cmMakefile_h
|
#ifndef cmMakefile_h
|
||||||
#define cmMakefile_h
|
#define cmMakefile_h
|
||||||
|
@ -23,6 +24,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "cmClassFile.h"
|
#include "cmClassFile.h"
|
||||||
|
#include "cmCollectFlags.h"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
@ -82,10 +84,17 @@ public:
|
||||||
{
|
{
|
||||||
return m_OutputHomeDirectory.c_str();
|
return m_OutputHomeDirectory.c_str();
|
||||||
}
|
}
|
||||||
|
cmCollectFlags& GetBuildFlags()
|
||||||
|
{
|
||||||
|
return m_BuildFlags;
|
||||||
|
}
|
||||||
|
const std::vector<std::string>& GetSubDirectories()
|
||||||
|
{
|
||||||
|
return m_SubDirectories;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void ReadTemplateInstanceDirectory(std::string&);
|
void ReadTemplateInstanceDirectory(std::string&);
|
||||||
void ReadSubdirs(std::ifstream& fin);
|
|
||||||
void ReadClasses(std::ifstream& fin, bool t);
|
void ReadClasses(std::ifstream& fin, bool t);
|
||||||
friend class cmMakeDepend; // make depend needs direct access
|
friend class cmMakeDepend; // make depend needs direct access
|
||||||
// to the m_Classes array
|
// to the m_Classes array
|
||||||
|
@ -99,7 +108,8 @@ protected:
|
||||||
std::string m_LibraryName; // library name
|
std::string m_LibraryName; // library name
|
||||||
std::vector<cmClassFile> m_Classes; // list of classes in makefile
|
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_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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -1,7 +1,52 @@
|
||||||
#include "cmSystemTools.h"
|
#include "cmSystemTools.h"
|
||||||
#include <direct.h>
|
|
||||||
#include "errno.h"
|
#include "errno.h"
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
#include <windows.h>
|
#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)
|
bool cmSystemTools::MakeDirectory(const char* path)
|
||||||
{
|
{
|
||||||
|
@ -21,10 +66,10 @@ bool cmSystemTools::MakeDirectory(const char* path)
|
||||||
while((pos = dir.find('/', pos)) != std::string::npos)
|
while((pos = dir.find('/', pos)) != std::string::npos)
|
||||||
{
|
{
|
||||||
std::string topdir = dir.substr(0, pos);
|
std::string topdir = dir.substr(0, pos);
|
||||||
_mkdir(topdir.c_str());
|
Mkdir(topdir.c_str());
|
||||||
pos++;
|
pos++;
|
||||||
}
|
}
|
||||||
if(_mkdir(path) != 0)
|
if(Mkdir(path) != 0)
|
||||||
{
|
{
|
||||||
// if it is some other error besides directory exists
|
// if it is some other error besides directory exists
|
||||||
// then return false
|
// then return false
|
||||||
|
@ -36,6 +81,9 @@ bool cmSystemTools::MakeDirectory(const char* path)
|
||||||
return true;
|
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,
|
void cmSystemTools::ReplaceString(std::string& source,
|
||||||
const char* replace,
|
const char* replace,
|
||||||
const char* with)
|
const char* with)
|
||||||
|
@ -52,3 +100,57 @@ void cmSystemTools::ReplaceString(std::string& source,
|
||||||
start = source.find(replace, start + lengthReplace );
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -14,23 +14,56 @@
|
||||||
|
|
||||||
=========================================================================*/
|
=========================================================================*/
|
||||||
/**
|
/**
|
||||||
* cmWindowsTools
|
* cmSystemTools - a collection of useful functions for CMake.
|
||||||
*/
|
*/
|
||||||
#ifndef cmWindowsTools_h
|
#ifndef cmSystemTools_h
|
||||||
#define cmWindowsTools_h
|
#define cmSystemTools_h
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#pragma warning ( disable : 4786 )
|
#pragma warning ( disable : 4786 )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
class cmSystemTools
|
class cmSystemTools
|
||||||
{
|
{
|
||||||
public:
|
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);
|
static bool MakeDirectory(const char* path);
|
||||||
|
/**
|
||||||
|
* Replace replace all occurances of the string in in
|
||||||
|
* souce string.
|
||||||
|
*/
|
||||||
static void ReplaceString(std::string& source,
|
static void ReplaceString(std::string& source,
|
||||||
const char* replace,
|
const char* replace,
|
||||||
const char* with);
|
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);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,14 @@ inline std::string FixDirectoryName(const char* dir)
|
||||||
return s;
|
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)
|
void cmUnixMakefile::OutputMakefile(const char* file)
|
||||||
{
|
{
|
||||||
std::ofstream fout(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;
|
std::cerr << "Error can not open " << file << " for write" << std::endl;
|
||||||
return;
|
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() )
|
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";
|
fout << "SRC_OBJ = \\\n";
|
||||||
for(int i = 0; i < m_Classes.size(); i++)
|
for(int i = 0; i < m_Classes.size(); i++)
|
||||||
{
|
{
|
||||||
|
@ -82,20 +109,41 @@ void cmUnixMakefile::OutputMakefile(const char* file)
|
||||||
}
|
}
|
||||||
fout << "\n";
|
fout << "\n";
|
||||||
}
|
}
|
||||||
if(strlen(this->GetLibraryName()) > 0)
|
// Ouput user make text embeded in the input file
|
||||||
{
|
|
||||||
fout << "ME = " << this->GetLibraryName() << "\n\n";
|
|
||||||
fout << "BUILD_LIB_FILE = lib${ME}${ITK_LIB_EXT}\n\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int i =0; i < m_MakeVerbatim.size(); i++)
|
for(int i =0; i < m_MakeVerbatim.size(); i++)
|
||||||
{
|
{
|
||||||
fout << m_MakeVerbatim[i] << "\n";
|
fout << m_MakeVerbatim[i] << "\n";
|
||||||
}
|
}
|
||||||
fout << "\n\n";
|
fout << "\n\n";
|
||||||
|
|
||||||
|
// Output rules for building executables
|
||||||
if( m_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++)
|
for(int i = 0; i < m_Classes.size(); i++)
|
||||||
{
|
{
|
||||||
if(!m_Classes[i].m_AbstractClass && !m_Classes[i].m_HeaderFileOnly)
|
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;
|
std::string DotO = m_Classes[i].m_ClassName;
|
||||||
DotO += ".o";
|
DotO += ".o";
|
||||||
fout << m_Classes[i].m_ClassName << ": " << DotO << "\n";
|
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"
|
fout << "\t${CXX} ${CXX_FLAGS} "
|
||||||
<< "\t-L${CMAKE_OBJ_DIR}/Code/Insight3DParty/vxl -lITKNumerics -lm ${DL_LIBS}\n\n";
|
<< DotO.c_str() << " "
|
||||||
|
<< linkLibs.c_str()
|
||||||
|
<< " -o $@ ""\n\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// ouput the list of executables
|
||||||
fout << "EXECUTABLES = \\\n";
|
fout << "EXECUTABLES = \\\n";
|
||||||
for(int i = 0; i < m_Classes.size(); i++)
|
for(int i = 0; i < m_Classes.size(); i++)
|
||||||
{
|
{
|
||||||
|
@ -122,7 +173,7 @@ void cmUnixMakefile::OutputMakefile(const char* file)
|
||||||
}
|
}
|
||||||
fout << "\n";
|
fout << "\n";
|
||||||
}
|
}
|
||||||
|
// Output Sub directory build rules
|
||||||
if( m_SubDirectories.size() )
|
if( m_SubDirectories.size() )
|
||||||
{
|
{
|
||||||
fout << "SUBDIR_BUILD = \\\n";
|
fout << "SUBDIR_BUILD = \\\n";
|
||||||
|
|
|
@ -25,7 +25,9 @@
|
||||||
class cmUnixMakefile : public cmMakefile
|
class cmUnixMakefile : public cmMakefile
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// Write the makefile to the named file
|
/**
|
||||||
|
* Write the makefile to the named file
|
||||||
|
*/
|
||||||
void OutputMakefile(const char* file);
|
void OutputMakefile(const char* file);
|
||||||
protected:
|
protected:
|
||||||
void OutputDepends(std::ostream&);
|
void OutputDepends(std::ostream&);
|
||||||
|
|
|
@ -26,10 +26,16 @@
|
||||||
class cmWindowsConfigure
|
class cmWindowsConfigure
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
/**
|
||||||
|
* Set the path to the top level of the source directory
|
||||||
|
*/
|
||||||
void SetWhereSource(const char* dir)
|
void SetWhereSource(const char* dir)
|
||||||
{
|
{
|
||||||
m_WhereSource = dir;
|
m_WhereSource = dir;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Set the path to the top level of the build directory
|
||||||
|
*/
|
||||||
void SetWhereBuild(const char* dir)
|
void SetWhereBuild(const char* dir)
|
||||||
{
|
{
|
||||||
m_WhereBuild = dir;
|
m_WhereBuild = dir;
|
||||||
|
|
|
@ -25,8 +25,17 @@
|
||||||
class itkVC60Configure : public cmWindowsConfigure
|
class itkVC60Configure : public cmWindowsConfigure
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
/**
|
||||||
|
* implement configure from parent
|
||||||
|
*/
|
||||||
virtual void Configure();
|
virtual void Configure();
|
||||||
|
/**
|
||||||
|
* create the main itk configure file
|
||||||
|
*/
|
||||||
virtual void GenerateITKConfigHeader();
|
virtual void GenerateITKConfigHeader();
|
||||||
|
/**
|
||||||
|
* Create the vnl configure file
|
||||||
|
*/
|
||||||
virtual void GenerateVNLConfigHeader();
|
virtual void GenerateVNLConfigHeader();
|
||||||
protected:
|
protected:
|
||||||
void CopyFileTo(const char* source,
|
void CopyFileTo(const char* source,
|
||||||
|
|
Loading…
Reference in New Issue