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
|
||||
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_OBJ_DIR@/CMake/CMakeVariables.make@MAKEQUOTE@
|
||||
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_CONFIG_DIR@/CMake/CMakeVariables.make@MAKEQUOTE@
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Include user-editable defines.
|
||||
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_OBJ_DIR@/CMakeLocal.make@MAKEQUOTE@
|
||||
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_CONFIG_DIR@/CMakeLocal.make@MAKEQUOTE@
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Include General Build Rules
|
||||
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_OBJ_DIR@/CMake/CMakeRules.make@MAKEQUOTE@
|
||||
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_CONFIG_DIR@/CMake/CMakeRules.make@MAKEQUOTE@
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# include simple rules for building .o files
|
||||
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_OBJ_DIR@/CMake/CMakeSimpleRules.make@MAKEQUOTE@
|
||||
# include simple rules for building .o files from source files
|
||||
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_CONFIG_DIR@/CMake/CMakeSimpleRules.make@MAKEQUOTE@
|
||||
|
||||
#
|
||||
# Makefile for
|
||||
|
@ -10,18 +10,18 @@ all: CMakeTargets.make ${OBJ_SUB_DIRS} ${EXECUTABLES} ${SUBDIR_BUILD} ${BUILD_LI
|
|||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
${CMAKE}: @fullSrcDir@/CMake/Source/*.cxx @fullSrcDir@/CMake/Source/*.h
|
||||
cd @CMAKE_OBJ_DIR@/CMake/Source; ${MAKE} CMakeBuildTargets
|
||||
${CMAKE}: ${topdir}/CMake/Source/*.cxx ${topdir}/CMake/Source/*.h
|
||||
cd ${CMAKE_CONFIG_DIR}/CMake/Source; ${MAKE} CMakeBuildTargets
|
||||
|
||||
depend: ${CMAKE}
|
||||
${CMAKE} ${srcdir}/CMakeLists.txt -S${srcdir} -I${srcdir} ${INCLUDE_FLAGS}
|
||||
${MAKE} -${MAKEFLAGS} CMakeTargets.make
|
||||
|
||||
|
||||
clean: ${SUBDIR_CLEAN}
|
||||
rm -f ${SRC_OBJ} ${EXECUTABLES}
|
||||
|
||||
CMakeTargets.make: ${CMAKE} ${srcdir}/CMakeLists.txt
|
||||
${CMAKE} ${srcdir}/CMakeLists.txt -S${srcdir} -I${srcdir} ${INCLUDE_FLAGS}
|
||||
${CMAKE} ${srcdir}/CMakeLists.txt -S${srcdir} -H${topdir} -B${CMAKE_CONFIG_DIR}
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# rules for the normal library
|
||||
|
|
|
@ -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@
|
||||
|
||||
CONFIG_DIR = @CMAKE_OBJ_DIR@
|
||||
# This is the directory configure was run in
|
||||
# where the binaries will be placed
|
||||
CMAKE_CONFIG_DIR = @CMAKE_CONFIG_DIR@
|
||||
|
||||
# the standard shell for make
|
||||
SHELL = /bin/sh
|
||||
|
||||
CMAKE_OBJ_DIR = ${CONFIG_DIR}
|
||||
|
||||
RANLIB = @RANLIB@
|
||||
CC = @CC@
|
||||
CFLAGS = @ITK_SHLIB_CFLAGS@ @ANSI_CFLAGS@
|
||||
|
@ -82,31 +110,21 @@ LIB_INSTALL_DIR = $(INSTALL_ROOT)$(exec_prefix)/lib
|
|||
BIN_INSTALL_DIR = $(INSTALL_ROOT)$(exec_prefix)/bin
|
||||
|
||||
# set up the path to the rulesgen program
|
||||
CMAKE = @CMAKE_OBJ_DIR@/CMake/Source/CMakeBuildTargets
|
||||
CMAKE = @CMAKE_CONFIG_DIR@/CMake/Source/CMakeBuildTargets
|
||||
KIT_OBJ = ${SRC_OBJ} ${EXTRA_KIT_OBJ}
|
||||
|
||||
|
||||
# ***** BEGIN VARIBLES THAT CAN BE OVERRIDDEN IN CMakeLocal.make.in **************
|
||||
|
||||
LOCAL_BUILD_TARGETS =
|
||||
LOCAL_LINK_FLAGS =
|
||||
USER_CFLAGS = @CFLAGS@
|
||||
USER_CXXFLAGS = @CXXFLAGS@
|
||||
|
||||
# ***** END VARIBLES THAT CAN BE OVERRIDDEN IN CMakeLocal.make.in **************
|
||||
|
||||
|
||||
|
||||
# compile line flags
|
||||
INCLUDE_FLAGS = -I. \
|
||||
-I${CONFIG_DIR}/Code/Insight3DParty/vxl \
|
||||
-I${CONFIG_DIR} \
|
||||
-I${topdir}/Code/Common \
|
||||
-I${topdir}/Code/Insight3DParty/vxl
|
||||
# C++ compile flags, INCLUDE_FLAGS is set in CMakeTargets.make which
|
||||
# is generated by CMakeBuildTargets, see CMake/Source
|
||||
|
||||
CXX_FLAGS = ${CPPFLAGS} ${USER_CXXFLAGS} ${CXXFLAGS} \
|
||||
${KIT_FLAGS} ${INCLUDE_FLAGS}
|
||||
|
||||
CC_FLAGS = ${CPPFLAGS} ${USER_CFLAGS} ${CFLAGS}
|
||||
# C compile flags, INCLUDE_FLAGS is set in CMakeTargets.make which
|
||||
# is generated by CMakeBuildTargets, see CMake/Source
|
||||
|
||||
CC_FLAGS = ${CPPFLAGS} ${USER_CFLAGS} ${CFLAGS} ${INCLUDE_FLAGS}
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
||||
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_OBJ_DIR@/CMake/CMakeMaster.make@MAKEQUOTE@
|
||||
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_CONFIG_DIR@/CMake/CMakeMaster.make@MAKEQUOTE@
|
||||
|
|
11
README
11
README
|
@ -32,9 +32,11 @@ CMakeBuildTargets -> Unix program to read CMakeLists.txt and generate CMakeT
|
|||
makefile fragments:
|
||||
CMakeMaster.make -> main file to be included by makefiles
|
||||
CMakeVariables.make -> all make varibles are set in this file
|
||||
CMakeRules.make -> All build rules are here
|
||||
CMakeRules.make -> All build rules are here (except Simple Rules)
|
||||
CMakeSimpleRules.make -> simple build rules for .o to .cxx, this is separate to be able
|
||||
to build CMakeBuildTargets itself.
|
||||
CMakeLocal.make -> Place for hand configuration
|
||||
CMakeTargets.make -> generated rules for make style build
|
||||
CMakeTargets.make -> generated rules for make style build in each directory
|
||||
MakefileTemplate.make -> master makefile template used by configure to generate Makefiles
|
||||
|
||||
Unix install:
|
||||
|
@ -50,7 +52,6 @@ make
|
|||
|
||||
|
||||
TODO:
|
||||
Fix cmUnixMakefile.cxx and cmDSPMakefile.cxx
|
||||
to read libraries and -I stuff from a config file
|
||||
|
||||
configure stuff for windows should be a copy configure file
|
||||
read in depend regular expression from a file
|
||||
|
||||
|
|
|
@ -16,16 +16,21 @@ main(int ac, char** av)
|
|||
for(int i =2; i < ac; i++)
|
||||
{
|
||||
std::string arg = av[i];
|
||||
if(arg.find("-I",0) != std::string::npos)
|
||||
{
|
||||
std::string path = arg.substr(2);
|
||||
md.AddSearchPath(path.c_str());
|
||||
}
|
||||
if(arg.find("-S",0) != std::string::npos)
|
||||
{
|
||||
std::string path = arg.substr(2);
|
||||
mf->SetCurrentDirectory(path.c_str());
|
||||
}
|
||||
if(arg.find("-B",0) != std::string::npos)
|
||||
{
|
||||
std::string path = arg.substr(2);
|
||||
mf->SetOutputHomeDirectory(path.c_str());
|
||||
}
|
||||
if(arg.find("-H",0) != std::string::npos)
|
||||
{
|
||||
std::string path = arg.substr(2);
|
||||
mf->SetHomeDirectory(path.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!mf->ReadMakefile(av[1]))
|
||||
|
|
|
@ -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>
|
||||
{{{
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name pcbuilderCMD
|
||||
End Project Dependency
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name CMakeSetupCMD
|
||||
End Project Dependency
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
#include "cmDSWBuilder.h"
|
||||
#include "cmDSPBuilder.h"
|
||||
#include "cmDSWMakefile.h"
|
||||
#include "cmDSPMakefile.h"
|
||||
#include <iostream>
|
||||
|
||||
void SetArgs(cmPCBuilder& builder, int ac, char** av)
|
||||
void SetArgs(cmMakefile& builder, int ac, char** av)
|
||||
{
|
||||
for(int i =3; i < ac; i++)
|
||||
{
|
||||
|
@ -16,7 +16,7 @@ void SetArgs(cmPCBuilder& builder, int ac, char** av)
|
|||
{
|
||||
std::string path = arg.substr(2);
|
||||
std::cerr << "set makefile dir " << path.c_str() << std::endl;
|
||||
builder.SetMakefileDirectory(path.c_str());
|
||||
builder.SetCurrentDirectory(path.c_str());
|
||||
}
|
||||
if(arg.find("-O",0) != std::string::npos)
|
||||
{
|
||||
|
@ -45,17 +45,17 @@ main(int ac, char** av)
|
|||
std::string arg = av[2];
|
||||
if(arg.find("-DSP", 0) != std::string::npos)
|
||||
{
|
||||
cmDSPBuilder builder;
|
||||
cmDSPMakefile builder;
|
||||
SetArgs(builder, ac, av);
|
||||
builder.SetInputMakefilePath(av[1]);
|
||||
builder.CreateDSPFile();
|
||||
builder.ReadMakefile(av[1]);
|
||||
builder.OutputDSPFile();
|
||||
}
|
||||
else
|
||||
{
|
||||
cmDSWBuilder builder;
|
||||
cmDSWMakefile builder;
|
||||
SetArgs(builder, ac, av);
|
||||
builder.SetInputMakefilePath(av[1]);
|
||||
builder.CreateDSWFile();
|
||||
builder.ReadMakefile(av[1]);
|
||||
builder.OutputDSWFile();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -99,6 +99,10 @@ SOURCE=.\cmClassFile.cxx
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\cmCollectFlags.cxx
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\cmDirectory.cxx
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
|
@ -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
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\cmCollectFlags.cxx
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\cmDirectory.cxx
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
@ -232,9 +236,5 @@ SOURCE=.\res\CMakeSetupDialog.ico
|
|||
SOURCE=.\res\CMakeSetupDialog.rc2
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ReadMe.txt
|
||||
# End Source File
|
||||
# End Target
|
||||
# End Project
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#include "stdafx.h"
|
||||
#include "CMakeSetup.h"
|
||||
#include "CMakeSetupDialog.h"
|
||||
#include "../cmDSWBuilder.h"
|
||||
#include "../cmDSWMakefile.h"
|
||||
#include "../itkVC60Configure.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
|
@ -232,19 +232,19 @@ void CMakeSetupDialog::OnOK()
|
|||
config.SetWhereBuild(m_WhereBuild);
|
||||
config.Configure();
|
||||
|
||||
cmDSWBuilder builder;
|
||||
cmDSWMakefile builder;
|
||||
// Set the ITK home directory
|
||||
builder.SetHomeDirectory(m_WhereSource);
|
||||
// Set the CMakeLists.txt file
|
||||
CString makefileIn = m_WhereSource;
|
||||
makefileIn += "/CMakeLists.txt";
|
||||
builder.SetInputMakefilePath(makefileIn);
|
||||
builder.ReadMakefile(makefileIn);
|
||||
// Set the output directory
|
||||
builder.SetOutputDirectory(m_WhereBuild);
|
||||
// set the directory which contains the CMakeLists.txt
|
||||
builder.SetMakefileDirectory(m_WhereSource);
|
||||
builder.SetCurrentDirectory(m_WhereSource);
|
||||
// Create the master DSW file and all children dsp files for ITK
|
||||
builder.CreateDSWFile();
|
||||
builder.OutputDSWFile();
|
||||
CDialog::OnOK();
|
||||
this->SaveToRegistry();
|
||||
}
|
||||
|
|
|
@ -6,8 +6,8 @@ VPATH = @srcdir@
|
|||
# This will cause an infinite loop as it will add the
|
||||
# rule for changing into this directory
|
||||
|
||||
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_OBJ_DIR@/CMake/CMakeVariables.make@MAKEQUOTE@
|
||||
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_OBJ_DIR@/CMake/CMakeSimpleRules.make@MAKEQUOTE@
|
||||
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_CONFIG_DIR@/CMake/CMakeVariables.make@MAKEQUOTE@
|
||||
@MAKEINCLUDE@ @MAKEQUOTE@@CMAKE_CONFIG_DIR@/CMake/CMakeSimpleRules.make@MAKEQUOTE@
|
||||
|
||||
OBJS = \
|
||||
cmClassFile.o \
|
||||
|
@ -16,12 +16,16 @@ cmMakefile.o \
|
|||
cmUnixMakefile.o \
|
||||
cmMakeDepend.o \
|
||||
cmRegularExpression.o \
|
||||
CMakeBuildTargets.o
|
||||
cmSystemTools.o \
|
||||
CMakeBuildTargets.o \
|
||||
cmCollectFlags.o
|
||||
|
||||
|
||||
cmDirectory.o : cmDirectory.h cmDirectory.cxx
|
||||
cmClassFile.o : cmClassFile.h cmClassFile.cxx
|
||||
cmMakefile.o : cmMakefile.h cmMakefile.cxx cmClassFile.h
|
||||
cmCollectFlags.o : cmCollectFlags.h cmCollectFlags.cxx cmSystemTools.h
|
||||
cmSystemTools.o : cmSystemTools.h cmSystemTools.cxx cmSystemTools.h
|
||||
cmDirectory.o : cmDirectory.h cmDirectory.cxx cmSystemTools.h
|
||||
cmClassFile.o : cmClassFile.h cmClassFile.cxx cmSystemTools.h
|
||||
cmMakefile.o : cmMakefile.h cmMakefile.cxx cmClassFile.h cmSystemTools.h
|
||||
cmUnixMakefile.o : cmUnixMakefile.h cmUnixMakefile.cxx cmMakefile.h cmClassFile.h
|
||||
cmMakeDepend.o : cmMakeDepend.h cmMakeDepend.cxx cmMakefile.h cmClassFile.h cmRegularExpression.h
|
||||
cmRegularExpression.o : cmRegularExpression.h cmRegularExpression.cxx
|
||||
|
|
|
@ -2,23 +2,10 @@
|
|||
#pragma warning ( disable : 4786 )
|
||||
#endif
|
||||
#include "cmClassFile.h"
|
||||
#include <sys/stat.h>
|
||||
#include "cmSystemTools.h"
|
||||
#include <iostream>
|
||||
|
||||
|
||||
// Helper function to hide the use of system stat function
|
||||
bool cmFileExists(const char* filename)
|
||||
{
|
||||
struct stat fs;
|
||||
if (stat(filename, &fs) != 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Set the name of the class and the full path to the file.
|
||||
// The class must be found in dir and end in name.cxx, name.txx,
|
||||
|
@ -37,7 +24,7 @@ void cmClassFile::SetName(const char* name, const char* dir)
|
|||
pathname += m_ClassName;
|
||||
std::string hname = pathname;
|
||||
hname += ".cxx";
|
||||
if(cmFileExists(hname.c_str()))
|
||||
if(cmSystemTools::FileExists(hname.c_str()))
|
||||
{
|
||||
m_HeaderFileOnly = false;
|
||||
m_FullPath = hname;
|
||||
|
@ -46,7 +33,7 @@ void cmClassFile::SetName(const char* name, const char* dir)
|
|||
|
||||
hname = pathname;
|
||||
hname += ".c";
|
||||
if(cmFileExists(hname.c_str()))
|
||||
if(cmSystemTools::FileExists(hname.c_str()))
|
||||
{
|
||||
m_HeaderFileOnly = false;
|
||||
m_FullPath = hname;
|
||||
|
@ -54,13 +41,19 @@ void cmClassFile::SetName(const char* name, const char* dir)
|
|||
}
|
||||
hname = pathname;
|
||||
hname += ".txx";
|
||||
if(cmFileExists(hname.c_str()))
|
||||
if(cmSystemTools::FileExists(hname.c_str()))
|
||||
{
|
||||
m_HeaderFileOnly = false;
|
||||
m_FullPath = hname;
|
||||
return;
|
||||
}
|
||||
std::cerr << "file seems to be a header only " << hname << " " << m_ClassName.c_str() << std::endl;
|
||||
hname = pathname;
|
||||
hname += ".h";
|
||||
if(!cmSystemTools::FileExists(hname.c_str()))
|
||||
{
|
||||
std::cerr << "ERROR, can not find file " << hname;
|
||||
std::cerr << "Tried .txx .cxx .c " << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -22,19 +22,25 @@
|
|||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
// helper function returns true if a file exits
|
||||
bool cmFileExists(const char* filename);
|
||||
|
||||
struct cmClassFile
|
||||
{
|
||||
// Set the name of the file
|
||||
/**
|
||||
* Set the name of the file, given the directory
|
||||
* the file should be in. Extensions are tried on
|
||||
* the name in the directory to find the actual file.
|
||||
*/
|
||||
void SetName(const char* name, const char* dir);
|
||||
/**
|
||||
* print the structure to cout
|
||||
*/
|
||||
void Print();
|
||||
|
||||
bool m_AbstractClass;
|
||||
bool m_HeaderFileOnly;
|
||||
std::string m_FullPath;
|
||||
std::string m_ClassName;
|
||||
bool m_AbstractClass; // is this an abstract class
|
||||
bool m_HeaderFileOnly; // is this file only a header file
|
||||
std::string m_FullPath; // full path to the file
|
||||
std::string m_ClassName; // class name
|
||||
// list of files that this file depends on
|
||||
std::vector<std::string> m_Depends;
|
||||
};
|
||||
|
||||
|
|
|
@ -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 "cmSystemTools.h"
|
||||
#include "cmCollectFlags.h"
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
#undef GetCurrentDirectory
|
||||
|
||||
static void Die(const char* message)
|
||||
{
|
||||
|
@ -13,28 +16,49 @@ static void Die(const char* message)
|
|||
|
||||
void cmDSPMakefile::OutputDSPFile()
|
||||
{
|
||||
m_IncludeOptions = "/STACK:10000000 ";
|
||||
m_IncludeOptions = "/I \"";
|
||||
m_IncludeOptions += this->GetHomeDirectory();
|
||||
m_IncludeOptions += "/Code/Common\" ";
|
||||
m_IncludeOptions += "/I \"";
|
||||
m_IncludeOptions += this->GetHomeDirectory();
|
||||
m_IncludeOptions += "/Code/Insight3DParty/vxl\" ";
|
||||
// Add the Build directory vcl to the -I path for config.h type stuff
|
||||
m_IncludeOptions += "/I \"";
|
||||
m_IncludeOptions += this->GetOutputHomeDirectory();
|
||||
m_IncludeOptions += "/Code/Insight3DParty/vxl\" ";
|
||||
// Add the Build directory to the -I path for config.h type stuff
|
||||
m_IncludeOptions += "/I \"";
|
||||
m_IncludeOptions += this->GetOutputHomeDirectory();
|
||||
m_IncludeOptions += "\" ";
|
||||
m_DebugLibraryOptions = " ITKCommon.lib ITKNumerics.lib ";
|
||||
m_DebugLibraryOptions += " /LIBPATH:\"";
|
||||
m_DebugLibraryOptions += this->GetOutputHomeDirectory();
|
||||
m_DebugLibraryOptions += "/Code/Common/Debug\" ";
|
||||
m_DebugLibraryOptions += " /LIBPATH:\"";
|
||||
m_DebugLibraryOptions += this->GetOutputHomeDirectory();
|
||||
m_DebugLibraryOptions += "/Code/Insight3DParty/vxl/Debug\" ";
|
||||
std::vector<std::string>& includes = m_BuildFlags.GetIncludeDirectories();
|
||||
std::vector<std::string>::iterator i;
|
||||
for(i = includes.begin(); i != includes.end(); ++i)
|
||||
{
|
||||
std::string include = *i;
|
||||
cmSystemTools::ReplaceString(include, "${CMAKE_CONFIG_DIR}",
|
||||
this->GetOutputHomeDirectory() );
|
||||
cmSystemTools::ReplaceString(include, "${srcdir}",
|
||||
this->GetHomeDirectory() );
|
||||
m_IncludeOptions += "/I \"";
|
||||
m_IncludeOptions += include;
|
||||
m_IncludeOptions += "\" ";
|
||||
}
|
||||
std::vector<std::string>& libs = m_BuildFlags.GetLinkLibraries();
|
||||
for(i = libs.begin(); i != libs.end(); ++i)
|
||||
{
|
||||
m_DebugLibraryOptions += " ";
|
||||
m_DebugLibraryOptions += *i;
|
||||
m_DebugLibraryOptions += ".lib ";
|
||||
}
|
||||
std::vector<std::string>& libswin32 = m_BuildFlags.GetLinkLibrariesWin32();
|
||||
for(i = libswin32.begin(); i != libswin32.end(); ++i)
|
||||
{
|
||||
m_DebugLibraryOptions += " ";
|
||||
m_DebugLibraryOptions += *i;
|
||||
m_DebugLibraryOptions += ".lib ";
|
||||
}
|
||||
std::vector<std::string>& libdirs = m_BuildFlags.GetLinkDirectories();
|
||||
for(i = libdirs.begin(); i != libdirs.end(); ++i)
|
||||
{
|
||||
m_DebugLibraryOptions += " /LIBPATH:\"";
|
||||
m_DebugLibraryOptions += *i;
|
||||
cmSystemTools::ReplaceString(m_DebugLibraryOptions, "${CMAKE_CONFIG_DIR}",
|
||||
this->GetOutputHomeDirectory() );
|
||||
if(i->find("Debug") == std::string::npos)
|
||||
{
|
||||
if(i->find("Release") == std::string::npos)
|
||||
{
|
||||
m_DebugLibraryOptions += "/Debug\" ";
|
||||
}
|
||||
}
|
||||
}
|
||||
m_DebugLibraryOptions += "/STACK:10000000 ";
|
||||
m_ReleaseLibraryOptions = m_DebugLibraryOptions;
|
||||
cmSystemTools::ReplaceString(m_ReleaseLibraryOptions, "Debug", "Release");
|
||||
// If the output directory is not the m_cmHomeDirectory
|
||||
|
@ -123,7 +147,6 @@ void cmDSPMakefile::WriteDSPBuildRule(std::ostream& fout)
|
|||
{
|
||||
std::string dspname = *(m_CreatedProjectNames.end()-1);
|
||||
dspname += ".dsp";
|
||||
#undef GetCurrentDirectory
|
||||
std::string makefileIn = this->GetCurrentDirectory();
|
||||
makefileIn += "/";
|
||||
makefileIn += "CMakeLists.txt";
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
#include "cmDSPMakefile.h"
|
||||
#include "cmSystemTools.h"
|
||||
#include "cmCollectFlags.h"
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
#undef GetCurrentDirectory
|
||||
|
||||
static void Die(const char* message)
|
||||
{
|
||||
|
@ -13,28 +16,49 @@ static void Die(const char* message)
|
|||
|
||||
void cmDSPMakefile::OutputDSPFile()
|
||||
{
|
||||
m_IncludeOptions = "/STACK:10000000 ";
|
||||
m_IncludeOptions = "/I \"";
|
||||
m_IncludeOptions += this->GetHomeDirectory();
|
||||
m_IncludeOptions += "/Code/Common\" ";
|
||||
m_IncludeOptions += "/I \"";
|
||||
m_IncludeOptions += this->GetHomeDirectory();
|
||||
m_IncludeOptions += "/Code/Insight3DParty/vxl\" ";
|
||||
// Add the Build directory vcl to the -I path for config.h type stuff
|
||||
m_IncludeOptions += "/I \"";
|
||||
m_IncludeOptions += this->GetOutputHomeDirectory();
|
||||
m_IncludeOptions += "/Code/Insight3DParty/vxl\" ";
|
||||
// Add the Build directory to the -I path for config.h type stuff
|
||||
m_IncludeOptions += "/I \"";
|
||||
m_IncludeOptions += this->GetOutputHomeDirectory();
|
||||
m_IncludeOptions += "\" ";
|
||||
m_DebugLibraryOptions = " ITKCommon.lib ITKNumerics.lib ";
|
||||
m_DebugLibraryOptions += " /LIBPATH:\"";
|
||||
m_DebugLibraryOptions += this->GetOutputHomeDirectory();
|
||||
m_DebugLibraryOptions += "/Code/Common/Debug\" ";
|
||||
m_DebugLibraryOptions += " /LIBPATH:\"";
|
||||
m_DebugLibraryOptions += this->GetOutputHomeDirectory();
|
||||
m_DebugLibraryOptions += "/Code/Insight3DParty/vxl/Debug\" ";
|
||||
std::vector<std::string>& includes = m_BuildFlags.GetIncludeDirectories();
|
||||
std::vector<std::string>::iterator i;
|
||||
for(i = includes.begin(); i != includes.end(); ++i)
|
||||
{
|
||||
std::string include = *i;
|
||||
cmSystemTools::ReplaceString(include, "${CMAKE_CONFIG_DIR}",
|
||||
this->GetOutputHomeDirectory() );
|
||||
cmSystemTools::ReplaceString(include, "${srcdir}",
|
||||
this->GetHomeDirectory() );
|
||||
m_IncludeOptions += "/I \"";
|
||||
m_IncludeOptions += include;
|
||||
m_IncludeOptions += "\" ";
|
||||
}
|
||||
std::vector<std::string>& libs = m_BuildFlags.GetLinkLibraries();
|
||||
for(i = libs.begin(); i != libs.end(); ++i)
|
||||
{
|
||||
m_DebugLibraryOptions += " ";
|
||||
m_DebugLibraryOptions += *i;
|
||||
m_DebugLibraryOptions += ".lib ";
|
||||
}
|
||||
std::vector<std::string>& libswin32 = m_BuildFlags.GetLinkLibrariesWin32();
|
||||
for(i = libswin32.begin(); i != libswin32.end(); ++i)
|
||||
{
|
||||
m_DebugLibraryOptions += " ";
|
||||
m_DebugLibraryOptions += *i;
|
||||
m_DebugLibraryOptions += ".lib ";
|
||||
}
|
||||
std::vector<std::string>& libdirs = m_BuildFlags.GetLinkDirectories();
|
||||
for(i = libdirs.begin(); i != libdirs.end(); ++i)
|
||||
{
|
||||
m_DebugLibraryOptions += " /LIBPATH:\"";
|
||||
m_DebugLibraryOptions += *i;
|
||||
cmSystemTools::ReplaceString(m_DebugLibraryOptions, "${CMAKE_CONFIG_DIR}",
|
||||
this->GetOutputHomeDirectory() );
|
||||
if(i->find("Debug") == std::string::npos)
|
||||
{
|
||||
if(i->find("Release") == std::string::npos)
|
||||
{
|
||||
m_DebugLibraryOptions += "/Debug\" ";
|
||||
}
|
||||
}
|
||||
}
|
||||
m_DebugLibraryOptions += "/STACK:10000000 ";
|
||||
m_ReleaseLibraryOptions = m_DebugLibraryOptions;
|
||||
cmSystemTools::ReplaceString(m_ReleaseLibraryOptions, "Debug", "Release");
|
||||
// If the output directory is not the m_cmHomeDirectory
|
||||
|
@ -123,7 +147,6 @@ void cmDSPMakefile::WriteDSPBuildRule(std::ostream& fout)
|
|||
{
|
||||
std::string dspname = *(m_CreatedProjectNames.end()-1);
|
||||
dspname += ".dsp";
|
||||
#undef GetCurrentDirectory
|
||||
std::string makefileIn = this->GetCurrentDirectory();
|
||||
makefileIn += "/";
|
||||
makefileIn += "CMakeLists.txt";
|
||||
|
|
|
@ -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 )
|
||||
#endif
|
||||
#include "cmDSWMakefile.h"
|
||||
#include "cmDSPBuilder.h"
|
||||
#include "cmSystemTools.h"
|
||||
#include "cmDSPMakefile.h"
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <windows.h>
|
||||
|
||||
// microsoft nonsense
|
||||
#undef GetCurrentDirectory
|
||||
#undef SetCurrentDirectory
|
||||
|
||||
// virtual override, ouput the makefile
|
||||
void cmDSWMakefile::OutputDSWFile()
|
||||
|
@ -27,80 +30,139 @@ void cmDSWMakefile::OutputDSWFile()
|
|||
MessageBox(0, m_OutputDirectory.c_str(), 0, MB_OK);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
std::string fname;
|
||||
fname = m_OutputDirectory;
|
||||
fname += "/";
|
||||
fname += this->m_LibraryName;
|
||||
fname += ".dsw";
|
||||
std::cerr << "writting dsw file " << fname.c_str() << std::endl;
|
||||
|
||||
std::ofstream fout(fname.c_str());
|
||||
if(!fout)
|
||||
{
|
||||
std::cerr << "Error can not open " << fname.c_str() << " for write" << std::endl;
|
||||
std::cerr << "Error can not open "
|
||||
<< fname.c_str() << " for write" << std::endl;
|
||||
return;
|
||||
}
|
||||
this->WriteDSWFile(fout);
|
||||
}
|
||||
|
||||
|
||||
void cmDSWMakefile::WriteDSWFile(std::ostream& fout)
|
||||
// ------------------------------------------------
|
||||
// Recursive function to find all the CMakeLists.txt files
|
||||
// in a project. As each file is read in, any directories in
|
||||
// the SUBDIR variable are also passed back to this function.
|
||||
// The result is a vector of cmDSPMakefile objects, one for
|
||||
// each directory with a CMakeLists.txt file
|
||||
//
|
||||
void cmDSWMakefile::FindAllCMakeListsFiles(const char* subdir,
|
||||
std::vector<cmDSPMakefile*>& makefiles)
|
||||
{
|
||||
this->WriteDSWHeader(fout);
|
||||
for(std::vector<std::string>::iterator i = m_SubDirectories.begin();
|
||||
i != m_SubDirectories.end(); ++i)
|
||||
{
|
||||
const char* dir = (*i).c_str();
|
||||
std::vector<std::string> dspnames = this->CreateDSPFile(dir);
|
||||
std::cerr << "Create dsp for " << dspnames.size() << " number of dsp files in " << dir << std::endl;
|
||||
for(std::vector<std::string>::iterator si = dspnames.begin();
|
||||
si != dspnames.end(); ++si)
|
||||
{
|
||||
std::string dspname = *si;
|
||||
std::cerr << "Create dsp for " << (*si).c_str() << std::endl;
|
||||
if(dspname == "")
|
||||
{
|
||||
std::cerr << "Project name not found in " << dir << "/CMakeLists.txt" << std::endl;
|
||||
std::cerr << "Skipping Project " << std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string subdir = "./";
|
||||
subdir += dir;
|
||||
this->WriteProject(fout, dspname.c_str(), subdir.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
this->WriteDSWFooter(fout);
|
||||
}
|
||||
|
||||
std::vector<std::string> cmDSWMakefile::CreateDSPFile(const char* subdir)
|
||||
{
|
||||
#undef GetCurrentDirectory
|
||||
std::string currentDir = this->GetCurrentDirectory();
|
||||
currentDir += "/";
|
||||
currentDir += subdir;
|
||||
cmDSPBuilder dsp;
|
||||
dsp.SetOutputHomeDirectory(this->GetOutputDirectory());
|
||||
dsp.SetHomeDirectory(this->GetHomeDirectory());
|
||||
dsp.SetMakefileDirectory(currentDir.c_str());
|
||||
std::string outdir = m_OutputDirectory;
|
||||
outdir += "/";
|
||||
outdir += subdir;
|
||||
dsp.SetOutputDirectory(outdir.c_str());
|
||||
currentDir += "/";
|
||||
currentDir += "CMakeLists.txt";
|
||||
dsp.SetInputMakefilePath(currentDir.c_str());
|
||||
dsp.CreateDSPFile();
|
||||
return dsp.GetCreatedProjectNames();
|
||||
// CMakeLists.txt exits in the subdirectory
|
||||
// then create a cmDSPMakefile for it
|
||||
if(cmSystemTools::FileExists(currentDir.c_str()))
|
||||
{
|
||||
// Create a new cmDSPMakefile to read the currentDir CMakeLists.txt file
|
||||
cmDSPMakefile* dsp = new cmDSPMakefile;
|
||||
// add it to the vector
|
||||
makefiles.push_back(dsp);
|
||||
// Set up the file with the current context
|
||||
dsp->SetOutputHomeDirectory(this->GetOutputDirectory());
|
||||
dsp->SetHomeDirectory(this->GetHomeDirectory());
|
||||
// set the current directory in the Source as a full
|
||||
// path
|
||||
std::string currentDir = this->GetCurrentDirectory();
|
||||
currentDir += "/";
|
||||
currentDir += subdir;
|
||||
dsp->SetCurrentDirectory(currentDir.c_str());
|
||||
// Parse the CMakeLists.txt file
|
||||
currentDir += "/CMakeLists.txt";
|
||||
dsp->ReadMakefile(currentDir.c_str());
|
||||
// Set the output directory which may be different than the source
|
||||
std::string outdir = m_OutputDirectory;
|
||||
outdir += "/";
|
||||
outdir += subdir;
|
||||
dsp->SetOutputDirectory(outdir.c_str());
|
||||
// Create the DSP file
|
||||
dsp->OutputDSPFile();
|
||||
// Look at any sub directories parsed (SUBDIRS) and
|
||||
// recurse into them
|
||||
const std::vector<std::string>& subdirs = dsp->GetSubDirectories();
|
||||
for(std::vector<std::string>::const_iterator i = subdirs.begin();
|
||||
i != subdirs.end(); ++i)
|
||||
{
|
||||
// append the subdirectory to the current directoy subdir
|
||||
std::string nextDir = subdir;
|
||||
nextDir += "/";
|
||||
nextDir += i->c_str();
|
||||
// recurse into nextDir
|
||||
this->FindAllCMakeListsFiles(nextDir.c_str(),
|
||||
makefiles);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "Can not find CMakeLists.txt in " << currentDir.c_str()
|
||||
<< std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Write a DSW file to the stream
|
||||
void cmDSWMakefile::WriteDSWFile(std::ostream& fout)
|
||||
{
|
||||
// Write out the header for a DSW file
|
||||
this->WriteDSWHeader(fout);
|
||||
// Create an array of dsp files for the project
|
||||
std::vector<cmDSPMakefile*> dspfiles;
|
||||
// loop over all the subdirectories for the DSW file,
|
||||
// and find all sub directory projects
|
||||
for(std::vector<std::string>::iterator j = m_SubDirectories.begin();
|
||||
j != m_SubDirectories.end(); ++j)
|
||||
{
|
||||
this->FindAllCMakeListsFiles(j->c_str(), dspfiles);
|
||||
}
|
||||
// For each DSP file created insert them into the DSW file
|
||||
for(std::vector<cmDSPMakefile*>::iterator k = dspfiles.begin();
|
||||
k != dspfiles.end(); ++k)
|
||||
{
|
||||
// Get the directory for the dsp file, it comes
|
||||
// from the source, so it has the source path which needs
|
||||
// to be removed as this may be built in a different directory
|
||||
// than the source
|
||||
std::string dir = (*k)->GetCurrentDirectory();
|
||||
// Get the home directory with the trailing slash
|
||||
std::string homedir = this->GetHomeDirectory();
|
||||
homedir += "/";
|
||||
// make the directory relative by removing the home directory part
|
||||
cmSystemTools::ReplaceString(dir, homedir.c_str(), "");
|
||||
// Get the list of create dsp files from the cmDSPMakefile, more
|
||||
// than one dsp could have been created per input CMakeLists.txt file
|
||||
std::vector<std::string> dspnames = (*k)->GetCreatedProjectNames();
|
||||
std::cerr << "Create dsp for "
|
||||
<< dspnames.size()
|
||||
<< " number of dsp files in " << dir << std::endl;
|
||||
for(std::vector<std::string>::iterator si = dspnames.begin();
|
||||
si != dspnames.end(); ++si)
|
||||
{
|
||||
// Write the project into the DSW file
|
||||
this->WriteProject(fout, si->c_str(), dir.c_str());
|
||||
}
|
||||
// delete the cmDSPMakefile object once done with it to avoid
|
||||
// leaks
|
||||
delete *k;
|
||||
}
|
||||
// Write the footer for the DSW file
|
||||
this->WriteDSWFooter(fout);
|
||||
}
|
||||
|
||||
|
||||
void cmDSWMakefile::WriteProject(std::ostream& fout,
|
||||
const char* dspname,
|
||||
const char* dir)
|
||||
const char* dspname,
|
||||
const char* dir)
|
||||
{
|
||||
fout << "###############################################################################\n\n";
|
||||
fout << "Project: \"" << dspname << "\"="
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
|
||||
#include "cmMakefile.h"
|
||||
#include <vector>
|
||||
class cmDSPMakefile;
|
||||
|
||||
|
||||
class cmDSWMakefile : public cmMakefile
|
||||
|
@ -31,9 +32,10 @@ class cmDSWMakefile : public cmMakefile
|
|||
public:
|
||||
virtual void OutputDSWFile();
|
||||
private:
|
||||
void FindAllCMakeListsFiles(const char* subdir,
|
||||
std::vector<cmDSPMakefile*>&);
|
||||
void WriteDSWFile(std::ostream& fout);
|
||||
void WriteDSWHeader(std::ostream& fout);
|
||||
std::vector<std::string> CreateDSPFile(const char* dir);
|
||||
void WriteProject(std::ostream& fout,
|
||||
const char* name, const char* path);
|
||||
void WriteDSWFooter(std::ostream& fout);
|
||||
|
|
|
@ -2,12 +2,15 @@
|
|||
#pragma warning ( disable : 4786 )
|
||||
#endif
|
||||
#include "cmDSWMakefile.h"
|
||||
#include "cmDSPBuilder.h"
|
||||
#include "cmSystemTools.h"
|
||||
#include "cmDSPMakefile.h"
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <windows.h>
|
||||
|
||||
// microsoft nonsense
|
||||
#undef GetCurrentDirectory
|
||||
#undef SetCurrentDirectory
|
||||
|
||||
// virtual override, ouput the makefile
|
||||
void cmDSWMakefile::OutputDSWFile()
|
||||
|
@ -27,80 +30,139 @@ void cmDSWMakefile::OutputDSWFile()
|
|||
MessageBox(0, m_OutputDirectory.c_str(), 0, MB_OK);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
std::string fname;
|
||||
fname = m_OutputDirectory;
|
||||
fname += "/";
|
||||
fname += this->m_LibraryName;
|
||||
fname += ".dsw";
|
||||
std::cerr << "writting dsw file " << fname.c_str() << std::endl;
|
||||
|
||||
std::ofstream fout(fname.c_str());
|
||||
if(!fout)
|
||||
{
|
||||
std::cerr << "Error can not open " << fname.c_str() << " for write" << std::endl;
|
||||
std::cerr << "Error can not open "
|
||||
<< fname.c_str() << " for write" << std::endl;
|
||||
return;
|
||||
}
|
||||
this->WriteDSWFile(fout);
|
||||
}
|
||||
|
||||
|
||||
void cmDSWMakefile::WriteDSWFile(std::ostream& fout)
|
||||
// ------------------------------------------------
|
||||
// Recursive function to find all the CMakeLists.txt files
|
||||
// in a project. As each file is read in, any directories in
|
||||
// the SUBDIR variable are also passed back to this function.
|
||||
// The result is a vector of cmDSPMakefile objects, one for
|
||||
// each directory with a CMakeLists.txt file
|
||||
//
|
||||
void cmDSWMakefile::FindAllCMakeListsFiles(const char* subdir,
|
||||
std::vector<cmDSPMakefile*>& makefiles)
|
||||
{
|
||||
this->WriteDSWHeader(fout);
|
||||
for(std::vector<std::string>::iterator i = m_SubDirectories.begin();
|
||||
i != m_SubDirectories.end(); ++i)
|
||||
{
|
||||
const char* dir = (*i).c_str();
|
||||
std::vector<std::string> dspnames = this->CreateDSPFile(dir);
|
||||
std::cerr << "Create dsp for " << dspnames.size() << " number of dsp files in " << dir << std::endl;
|
||||
for(std::vector<std::string>::iterator si = dspnames.begin();
|
||||
si != dspnames.end(); ++si)
|
||||
{
|
||||
std::string dspname = *si;
|
||||
std::cerr << "Create dsp for " << (*si).c_str() << std::endl;
|
||||
if(dspname == "")
|
||||
{
|
||||
std::cerr << "Project name not found in " << dir << "/CMakeLists.txt" << std::endl;
|
||||
std::cerr << "Skipping Project " << std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string subdir = "./";
|
||||
subdir += dir;
|
||||
this->WriteProject(fout, dspname.c_str(), subdir.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
this->WriteDSWFooter(fout);
|
||||
}
|
||||
|
||||
std::vector<std::string> cmDSWMakefile::CreateDSPFile(const char* subdir)
|
||||
{
|
||||
#undef GetCurrentDirectory
|
||||
std::string currentDir = this->GetCurrentDirectory();
|
||||
currentDir += "/";
|
||||
currentDir += subdir;
|
||||
cmDSPBuilder dsp;
|
||||
dsp.SetOutputHomeDirectory(this->GetOutputDirectory());
|
||||
dsp.SetHomeDirectory(this->GetHomeDirectory());
|
||||
dsp.SetMakefileDirectory(currentDir.c_str());
|
||||
std::string outdir = m_OutputDirectory;
|
||||
outdir += "/";
|
||||
outdir += subdir;
|
||||
dsp.SetOutputDirectory(outdir.c_str());
|
||||
currentDir += "/";
|
||||
currentDir += "CMakeLists.txt";
|
||||
dsp.SetInputMakefilePath(currentDir.c_str());
|
||||
dsp.CreateDSPFile();
|
||||
return dsp.GetCreatedProjectNames();
|
||||
// CMakeLists.txt exits in the subdirectory
|
||||
// then create a cmDSPMakefile for it
|
||||
if(cmSystemTools::FileExists(currentDir.c_str()))
|
||||
{
|
||||
// Create a new cmDSPMakefile to read the currentDir CMakeLists.txt file
|
||||
cmDSPMakefile* dsp = new cmDSPMakefile;
|
||||
// add it to the vector
|
||||
makefiles.push_back(dsp);
|
||||
// Set up the file with the current context
|
||||
dsp->SetOutputHomeDirectory(this->GetOutputDirectory());
|
||||
dsp->SetHomeDirectory(this->GetHomeDirectory());
|
||||
// set the current directory in the Source as a full
|
||||
// path
|
||||
std::string currentDir = this->GetCurrentDirectory();
|
||||
currentDir += "/";
|
||||
currentDir += subdir;
|
||||
dsp->SetCurrentDirectory(currentDir.c_str());
|
||||
// Parse the CMakeLists.txt file
|
||||
currentDir += "/CMakeLists.txt";
|
||||
dsp->ReadMakefile(currentDir.c_str());
|
||||
// Set the output directory which may be different than the source
|
||||
std::string outdir = m_OutputDirectory;
|
||||
outdir += "/";
|
||||
outdir += subdir;
|
||||
dsp->SetOutputDirectory(outdir.c_str());
|
||||
// Create the DSP file
|
||||
dsp->OutputDSPFile();
|
||||
// Look at any sub directories parsed (SUBDIRS) and
|
||||
// recurse into them
|
||||
const std::vector<std::string>& subdirs = dsp->GetSubDirectories();
|
||||
for(std::vector<std::string>::const_iterator i = subdirs.begin();
|
||||
i != subdirs.end(); ++i)
|
||||
{
|
||||
// append the subdirectory to the current directoy subdir
|
||||
std::string nextDir = subdir;
|
||||
nextDir += "/";
|
||||
nextDir += i->c_str();
|
||||
// recurse into nextDir
|
||||
this->FindAllCMakeListsFiles(nextDir.c_str(),
|
||||
makefiles);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "Can not find CMakeLists.txt in " << currentDir.c_str()
|
||||
<< std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Write a DSW file to the stream
|
||||
void cmDSWMakefile::WriteDSWFile(std::ostream& fout)
|
||||
{
|
||||
// Write out the header for a DSW file
|
||||
this->WriteDSWHeader(fout);
|
||||
// Create an array of dsp files for the project
|
||||
std::vector<cmDSPMakefile*> dspfiles;
|
||||
// loop over all the subdirectories for the DSW file,
|
||||
// and find all sub directory projects
|
||||
for(std::vector<std::string>::iterator j = m_SubDirectories.begin();
|
||||
j != m_SubDirectories.end(); ++j)
|
||||
{
|
||||
this->FindAllCMakeListsFiles(j->c_str(), dspfiles);
|
||||
}
|
||||
// For each DSP file created insert them into the DSW file
|
||||
for(std::vector<cmDSPMakefile*>::iterator k = dspfiles.begin();
|
||||
k != dspfiles.end(); ++k)
|
||||
{
|
||||
// Get the directory for the dsp file, it comes
|
||||
// from the source, so it has the source path which needs
|
||||
// to be removed as this may be built in a different directory
|
||||
// than the source
|
||||
std::string dir = (*k)->GetCurrentDirectory();
|
||||
// Get the home directory with the trailing slash
|
||||
std::string homedir = this->GetHomeDirectory();
|
||||
homedir += "/";
|
||||
// make the directory relative by removing the home directory part
|
||||
cmSystemTools::ReplaceString(dir, homedir.c_str(), "");
|
||||
// Get the list of create dsp files from the cmDSPMakefile, more
|
||||
// than one dsp could have been created per input CMakeLists.txt file
|
||||
std::vector<std::string> dspnames = (*k)->GetCreatedProjectNames();
|
||||
std::cerr << "Create dsp for "
|
||||
<< dspnames.size()
|
||||
<< " number of dsp files in " << dir << std::endl;
|
||||
for(std::vector<std::string>::iterator si = dspnames.begin();
|
||||
si != dspnames.end(); ++si)
|
||||
{
|
||||
// Write the project into the DSW file
|
||||
this->WriteProject(fout, si->c_str(), dir.c_str());
|
||||
}
|
||||
// delete the cmDSPMakefile object once done with it to avoid
|
||||
// leaks
|
||||
delete *k;
|
||||
}
|
||||
// Write the footer for the DSW file
|
||||
this->WriteDSWFooter(fout);
|
||||
}
|
||||
|
||||
|
||||
void cmDSWMakefile::WriteProject(std::ostream& fout,
|
||||
const char* dspname,
|
||||
const char* dir)
|
||||
const char* dspname,
|
||||
const char* dir)
|
||||
{
|
||||
fout << "###############################################################################\n\n";
|
||||
fout << "Project: \"" << dspname << "\"="
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
|
||||
#include "cmMakefile.h"
|
||||
#include <vector>
|
||||
class cmDSPMakefile;
|
||||
|
||||
|
||||
class cmDSWMakefile : public cmMakefile
|
||||
|
@ -31,9 +32,10 @@ class cmDSWMakefile : public cmMakefile
|
|||
public:
|
||||
virtual void OutputDSWFile();
|
||||
private:
|
||||
void FindAllCMakeListsFiles(const char* subdir,
|
||||
std::vector<cmDSPMakefile*>&);
|
||||
void WriteDSWFile(std::ostream& fout);
|
||||
void WriteDSWHeader(std::ostream& fout);
|
||||
std::vector<std::string> CreateDSPFile(const char* dir);
|
||||
void WriteProject(std::ostream& fout,
|
||||
const char* name, const char* path);
|
||||
void WriteDSWFooter(std::ostream& fout);
|
||||
|
|
|
@ -2,23 +2,27 @@
|
|||
#pragma warning ( disable : 4786 )
|
||||
#endif
|
||||
#include "cmMakeDepend.h"
|
||||
#include "cmSystemTools.h"
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <algorithm>
|
||||
#include <functional>
|
||||
|
||||
|
||||
void cmMakeDepend::SetIncludeRegularExpression(const char* prefix)
|
||||
{
|
||||
m_IncludeFileRegularExpression.compile(prefix);
|
||||
}
|
||||
|
||||
cmMakeDepend::cmMakeDepend()
|
||||
{
|
||||
m_Verbose = false;
|
||||
m_IncludeFileRegularExpression.compile("^itk|^vtk|^vnl|^vcl|^f2c");
|
||||
}
|
||||
|
||||
|
||||
// only files matching this regular expression with be considered
|
||||
void cmMakeDepend::SetIncludeRegularExpression(const char* prefix)
|
||||
{
|
||||
m_IncludeFileRegularExpression.compile(prefix);
|
||||
}
|
||||
|
||||
|
||||
cmMakeDepend::~cmMakeDepend()
|
||||
{
|
||||
for(DependArray::iterator i = m_DependInformation.begin();
|
||||
|
@ -32,11 +36,25 @@ cmMakeDepend::~cmMakeDepend()
|
|||
|
||||
// Set the makefile that depends will be made from.
|
||||
// The pointer is kept so the cmClassFile array can
|
||||
// be updated with the depend information.
|
||||
// be updated with the depend information in the cmMakefile.
|
||||
|
||||
void cmMakeDepend::SetMakefile(cmMakefile* makefile)
|
||||
{
|
||||
m_Makefile = makefile;
|
||||
|
||||
// Now extract any include paths from the makefile flags
|
||||
cmCollectFlags& flags = m_Makefile->GetBuildFlags();
|
||||
std::vector<std::string>& includes = flags.GetIncludeDirectories();
|
||||
std::vector<std::string>::iterator j;
|
||||
for(j = includes.begin(); j != includes.end(); ++j)
|
||||
{
|
||||
cmSystemTools::ReplaceString(*j, "${CMAKE_CONFIG_DIR}",
|
||||
m_Makefile->GetOutputHomeDirectory() );
|
||||
cmSystemTools::ReplaceString(*j, "${srcdir}",
|
||||
m_Makefile->GetHomeDirectory() );
|
||||
this->AddSearchPath(j->c_str());
|
||||
}
|
||||
// Now create cmDependInformation objects for files in the directory
|
||||
int index = 0;
|
||||
std::vector<cmClassFile>::iterator i = makefile->m_Classes.begin();
|
||||
while(i != makefile->m_Classes.end())
|
||||
|
@ -49,7 +67,6 @@ void cmMakeDepend::SetMakefile(cmMakefile* makefile)
|
|||
info->m_IncludeName = (*i).m_FullPath;
|
||||
m_DependInformation.push_back(info);
|
||||
info->m_ClassFileIndex = index;
|
||||
|
||||
}
|
||||
++i;
|
||||
index++;
|
||||
|
@ -195,6 +212,9 @@ int cmMakeDepend::FindInformation(const char* fname)
|
|||
}
|
||||
cmDependInformation* newinfo = new cmDependInformation;
|
||||
newinfo->m_FullPath = this->FullPath(fname);
|
||||
// Add the directory where this file was found to the search path
|
||||
// may have been foo/bar.h, but bar may include files from the foo
|
||||
// directory without the foo prefix
|
||||
this->AddFileToSearchPath(newinfo->m_FullPath.c_str());
|
||||
newinfo->m_IncludeName = fname;
|
||||
m_DependInformation.push_back(newinfo);
|
||||
|
@ -204,13 +224,15 @@ int cmMakeDepend::FindInformation(const char* fname)
|
|||
// remove duplicate indices from the depend information
|
||||
void cmDependInformation::RemoveDuplicateIndices()
|
||||
{
|
||||
// sort the array
|
||||
std::sort(m_Indices.begin(), m_Indices.end(), std::less<int>());
|
||||
// remove duplicates
|
||||
std::vector<int>::iterator new_end =
|
||||
std::unique(m_Indices.begin(), m_Indices.end());
|
||||
m_Indices.erase(new_end, m_Indices.end());
|
||||
}
|
||||
|
||||
// add the depend information from info to this
|
||||
// add the depend information from info to the m_Indices varible of this class.
|
||||
void cmDependInformation::MergeInfo(cmDependInformation* info)
|
||||
{
|
||||
std::vector<int>::iterator i = info->m_Indices.begin();
|
||||
|
@ -226,19 +248,19 @@ std::string cmMakeDepend::FullPath(const char* fname)
|
|||
for(std::vector<std::string>::iterator i = m_IncludeDirectories.begin();
|
||||
i != m_IncludeDirectories.end(); ++i)
|
||||
{
|
||||
if(cmFileExists(fname))
|
||||
if(cmSystemTools::FileExists(fname))
|
||||
{
|
||||
return std::string(fname);
|
||||
}
|
||||
std::string path = *i;
|
||||
path = path + "/";
|
||||
path = path + fname;
|
||||
if(cmFileExists(path.c_str()))
|
||||
if(cmSystemTools::FileExists(path.c_str()))
|
||||
{
|
||||
return path;
|
||||
}
|
||||
}
|
||||
std::cerr << "File not found " << fname << std::endl;
|
||||
std::cerr << "Depend: File not found " << fname << std::endl;
|
||||
return std::string(fname);
|
||||
}
|
||||
|
||||
|
|
|
@ -4,39 +4,11 @@
|
|||
#include "cmMakefile.h"
|
||||
#include "cmClassFile.h"
|
||||
#include "cmDirectory.h"
|
||||
|
||||
#include "cmSystemTools.h"
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
|
||||
|
||||
// remove extra spaces and the "\" character from the name
|
||||
// of the class as it is in the CMakeLists.txt
|
||||
inline std::string CleanUpName(const char* name)
|
||||
{
|
||||
std::string className = name;
|
||||
size_t i =0;
|
||||
while(className[i] == ' ')
|
||||
{
|
||||
i++;
|
||||
}
|
||||
if(i)
|
||||
{
|
||||
className = className.substr(i, className.size());
|
||||
}
|
||||
size_t pos = className.find('\\');
|
||||
if(pos != std::string::npos)
|
||||
{
|
||||
className = className.substr(0, pos);
|
||||
}
|
||||
|
||||
pos = className.find(' ');
|
||||
if(pos != std::string::npos)
|
||||
{
|
||||
className = className.substr(0, pos);
|
||||
}
|
||||
return className;
|
||||
}
|
||||
|
||||
// default is not to be building executables
|
||||
cmMakefile::cmMakefile()
|
||||
{
|
||||
|
@ -55,7 +27,10 @@ void cmMakefile::Print()
|
|||
|
||||
bool cmMakefile::ReadMakefile(const char* filename)
|
||||
{
|
||||
std::cerr << "reading makefile " << filename << std::endl;
|
||||
m_BuildFlags.SetSourceHomeDirectory(this->GetHomeDirectory());
|
||||
m_BuildFlags.SetStartDirectory(this->GetCurrentDirectory());
|
||||
m_BuildFlags.ParseDirectories();
|
||||
|
||||
std::ifstream fin(filename);
|
||||
if(!fin)
|
||||
{
|
||||
|
@ -106,7 +81,7 @@ bool cmMakefile::ReadMakefile(const char* filename)
|
|||
{
|
||||
if(line.find("\\") != std::string::npos)
|
||||
{
|
||||
this->ReadSubdirs(fin);
|
||||
cmSystemTools::ReadList(m_SubDirectories, fin);
|
||||
}
|
||||
}
|
||||
else if(line.find("EXECUTABLES") != std::string::npos)
|
||||
|
@ -177,7 +152,7 @@ void cmMakefile::ReadClasses(std::ifstream& fin,
|
|||
done = true;
|
||||
}
|
||||
// remove extra spaces and \ from the class name
|
||||
classname = CleanUpName(classname.c_str());
|
||||
classname = cmSystemTools::CleanUpName(classname.c_str());
|
||||
|
||||
// if this is not an abstract list then add new class
|
||||
// to the list of classes in this makefile
|
||||
|
@ -204,6 +179,9 @@ void cmMakefile::ReadClasses(std::ifstream& fin,
|
|||
}
|
||||
}
|
||||
|
||||
// Find all of the files in dir as specified from this line:
|
||||
// TEMPLATE_INSTANCE_DIRECTORY = dir
|
||||
// Add all the files to the m_Classes array.
|
||||
|
||||
void cmMakefile::ReadTemplateInstanceDirectory(std::string& line)
|
||||
{
|
||||
|
@ -211,7 +189,7 @@ void cmMakefile::ReadTemplateInstanceDirectory(std::string& line)
|
|||
if(start != std::string::npos)
|
||||
{
|
||||
std::string dirname = line.substr(start+1, line.size());
|
||||
dirname = CleanUpName(dirname.c_str());
|
||||
dirname = cmSystemTools::CleanUpName(dirname.c_str());
|
||||
std::string tdir = this->GetCurrentDirectory();
|
||||
tdir += "/";
|
||||
tdir += dirname;
|
||||
|
@ -250,28 +228,3 @@ void cmMakefile::ReadTemplateInstanceDirectory(std::string& line)
|
|||
}
|
||||
|
||||
|
||||
|
||||
// Read a list of subdirectories from the stream
|
||||
void cmMakefile::ReadSubdirs(std::ifstream& fin)
|
||||
{
|
||||
char inbuffer[2048];
|
||||
bool done = false;
|
||||
|
||||
while (!done)
|
||||
{
|
||||
// read a line from the makefile
|
||||
fin.getline(inbuffer, 2047);
|
||||
// convert to a string class
|
||||
std::string dir = inbuffer;
|
||||
// if the line does not end in \ then we are at the
|
||||
// end of the list
|
||||
if(dir.find('\\') == std::string::npos)
|
||||
{
|
||||
done = true;
|
||||
}
|
||||
// remove extra spaces and \ from the class name
|
||||
dir = CleanUpName(dir.c_str());
|
||||
m_SubDirectories.push_back(dir);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,8 @@
|
|||
|
||||
=========================================================================*/
|
||||
/**
|
||||
* cmMakefile
|
||||
* cmMakefile - used to parse and store the contents of a
|
||||
* CMakeLists.txt makefile in memory.
|
||||
*/
|
||||
#ifndef cmMakefile_h
|
||||
#define cmMakefile_h
|
||||
|
@ -23,6 +24,7 @@
|
|||
#endif
|
||||
|
||||
#include "cmClassFile.h"
|
||||
#include "cmCollectFlags.h"
|
||||
#include <vector>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
|
@ -82,10 +84,17 @@ public:
|
|||
{
|
||||
return m_OutputHomeDirectory.c_str();
|
||||
}
|
||||
cmCollectFlags& GetBuildFlags()
|
||||
{
|
||||
return m_BuildFlags;
|
||||
}
|
||||
const std::vector<std::string>& GetSubDirectories()
|
||||
{
|
||||
return m_SubDirectories;
|
||||
}
|
||||
|
||||
private:
|
||||
void ReadTemplateInstanceDirectory(std::string&);
|
||||
void ReadSubdirs(std::ifstream& fin);
|
||||
void ReadClasses(std::ifstream& fin, bool t);
|
||||
friend class cmMakeDepend; // make depend needs direct access
|
||||
// to the m_Classes array
|
||||
|
@ -99,7 +108,8 @@ protected:
|
|||
std::string m_LibraryName; // library name
|
||||
std::vector<cmClassFile> m_Classes; // list of classes in makefile
|
||||
std::vector<std::string> m_SubDirectories; // list of sub directories
|
||||
std::vector<std::string> m_MakeVerbatim; // list of sub directories
|
||||
std::vector<std::string> m_MakeVerbatim; // lines copied from input file
|
||||
cmCollectFlags m_BuildFlags;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -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 <direct.h>
|
||||
#include "errno.h"
|
||||
#include <sys/stat.h>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#include <windows.h>
|
||||
#include <direct.h>
|
||||
inline int Mkdir(const char* dir)
|
||||
{
|
||||
return _mkdir(dir);
|
||||
}
|
||||
#else
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
inline int Mkdir(const char* dir)
|
||||
{
|
||||
return mkdir(dir, 00700);
|
||||
}
|
||||
#endif
|
||||
|
||||
// remove extra spaces and the "\" character from the name
|
||||
// of the class as it is in the CMakeLists.txt
|
||||
std::string cmSystemTools::CleanUpName(const char* name)
|
||||
{
|
||||
std::string className = name;
|
||||
size_t i =0;
|
||||
while(className[i] == ' ')
|
||||
{
|
||||
i++;
|
||||
}
|
||||
if(i)
|
||||
{
|
||||
className = className.substr(i, className.size());
|
||||
}
|
||||
size_t pos = className.find('\\');
|
||||
if(pos != std::string::npos)
|
||||
{
|
||||
className = className.substr(0, pos);
|
||||
}
|
||||
|
||||
pos = className.find(' ');
|
||||
if(pos != std::string::npos)
|
||||
{
|
||||
className = className.substr(0, pos);
|
||||
}
|
||||
return className;
|
||||
}
|
||||
|
||||
|
||||
bool cmSystemTools::MakeDirectory(const char* path)
|
||||
{
|
||||
|
@ -21,10 +66,10 @@ bool cmSystemTools::MakeDirectory(const char* path)
|
|||
while((pos = dir.find('/', pos)) != std::string::npos)
|
||||
{
|
||||
std::string topdir = dir.substr(0, pos);
|
||||
_mkdir(topdir.c_str());
|
||||
Mkdir(topdir.c_str());
|
||||
pos++;
|
||||
}
|
||||
if(_mkdir(path) != 0)
|
||||
if(Mkdir(path) != 0)
|
||||
{
|
||||
// if it is some other error besides directory exists
|
||||
// then return false
|
||||
|
@ -36,6 +81,9 @@ bool cmSystemTools::MakeDirectory(const char* path)
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
// replace replace with with as many times as it shows up in source.
|
||||
// write the result into source.
|
||||
void cmSystemTools::ReplaceString(std::string& source,
|
||||
const char* replace,
|
||||
const char* with)
|
||||
|
@ -52,3 +100,57 @@ void cmSystemTools::ReplaceString(std::string& source,
|
|||
start = source.find(replace, start + lengthReplace );
|
||||
}
|
||||
}
|
||||
|
||||
// return true if the file exists
|
||||
bool cmSystemTools::FileExists(const char* filename)
|
||||
{
|
||||
struct stat fs;
|
||||
if (stat(filename, &fs) != 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Read a list from a CMakeLists.txt file open stream.
|
||||
// assume the stream has just read "VAR = \"
|
||||
// read until there is not a "\" at the end of the line.
|
||||
void cmSystemTools::ReadList(std::vector<std::string>& stringList,
|
||||
std::ifstream& fin)
|
||||
{
|
||||
char inbuffer[2048];
|
||||
bool done = false;
|
||||
while ( !done )
|
||||
{
|
||||
fin.getline(inbuffer, 2047 );
|
||||
std::string inname = inbuffer;
|
||||
if(inname.find('\\') == std::string::npos)
|
||||
{
|
||||
done = true;
|
||||
}
|
||||
if(inname.size())
|
||||
{
|
||||
stringList.push_back(cmSystemTools::CleanUpName(inname.c_str()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// convert windows slashes to unix slashes \ with /
|
||||
void cmSystemTools::ConvertToUnixSlashes(std::string& path)
|
||||
{
|
||||
std::string::size_type pos = path.find('\\');
|
||||
while(pos != std::string::npos)
|
||||
{
|
||||
path[pos] = '/';
|
||||
pos = path.find('\\');
|
||||
}
|
||||
// remove any trailing slash
|
||||
if(path[path.size()-1] == '/')
|
||||
{
|
||||
path = path.substr(0, path.size()-1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,23 +14,56 @@
|
|||
|
||||
=========================================================================*/
|
||||
/**
|
||||
* cmWindowsTools
|
||||
* cmSystemTools - a collection of useful functions for CMake.
|
||||
*/
|
||||
#ifndef cmWindowsTools_h
|
||||
#define cmWindowsTools_h
|
||||
#ifndef cmSystemTools_h
|
||||
#define cmSystemTools_h
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning ( disable : 4786 )
|
||||
#endif
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <fstream>
|
||||
|
||||
class cmSystemTools
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Make a new directory if it is not there. This function
|
||||
* can make a full path even if none of the directories existed
|
||||
* prior to calling this function.
|
||||
*/
|
||||
static bool MakeDirectory(const char* path);
|
||||
/**
|
||||
* Replace replace all occurances of the string in in
|
||||
* souce string.
|
||||
*/
|
||||
static void ReplaceString(std::string& source,
|
||||
const char* replace,
|
||||
const char* with);
|
||||
/**
|
||||
* Remove extra spaces and the trailing \ from a string.
|
||||
*/
|
||||
static std::string CleanUpName(const char* name);
|
||||
/**
|
||||
* Replace windows slashes with unix style slashes
|
||||
*/
|
||||
static void ConvertToUnixSlashes(std::string& path);
|
||||
|
||||
/**
|
||||
* Return true if a file exists
|
||||
*/
|
||||
static bool FileExists(const char* filename);
|
||||
/**
|
||||
* Read a list from a file into the array of strings.
|
||||
* This function assumes that the first line of the
|
||||
* list has been read. For example: NAME = \ was already
|
||||
* read in. The reading stops when there are no more
|
||||
* continuation characters.
|
||||
*/
|
||||
static void ReadList(std::vector<std::string>& stringList,
|
||||
std::ifstream& fin);
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -53,7 +53,14 @@ inline std::string FixDirectoryName(const char* dir)
|
|||
return s;
|
||||
}
|
||||
|
||||
// output the makefile to the named file
|
||||
// This is where CMakeTargets.make is generated
|
||||
// This function ouputs the following:
|
||||
// 1. Include flags for the compiler
|
||||
// 2. List of .o files that need to be compiled
|
||||
// 3. Rules to build executables including -l and -L options
|
||||
// 4. Rules to build in sub directories
|
||||
// 5. The name of the library being built, if it is a library
|
||||
|
||||
void cmUnixMakefile::OutputMakefile(const char* file)
|
||||
{
|
||||
std::ofstream fout(file);
|
||||
|
@ -62,8 +69,28 @@ void cmUnixMakefile::OutputMakefile(const char* file)
|
|||
std::cerr << "Error can not open " << file << " for write" << std::endl;
|
||||
return;
|
||||
}
|
||||
// Output Include paths
|
||||
fout << "INCLUDE_FLAGS = ";
|
||||
std::vector<std::string>& includes = m_BuildFlags.GetIncludeDirectories();
|
||||
std::vector<std::string>::iterator i;
|
||||
for(i = includes.begin(); i != includes.end(); ++i)
|
||||
{
|
||||
std::string include = *i;
|
||||
fout << "-I" << i->c_str() << " ";
|
||||
}
|
||||
fout << " ${LOCAL_INCLUDE_FLAGS} ";
|
||||
fout << "\n";
|
||||
// see if there are files to compile in this makefile
|
||||
// These are used for both libraries and executables
|
||||
if(m_Classes.size() )
|
||||
{
|
||||
// Ouput Library name if there are SRC_OBJS
|
||||
if(strlen(this->GetLibraryName()) > 0)
|
||||
{
|
||||
fout << "ME = " << this->GetLibraryName() << "\n\n";
|
||||
fout << "BUILD_LIB_FILE = lib${ME}${ITK_LIB_EXT}\n\n";
|
||||
}
|
||||
// Output SRC_OBJ list for all the classes to be compiled
|
||||
fout << "SRC_OBJ = \\\n";
|
||||
for(int i = 0; i < m_Classes.size(); i++)
|
||||
{
|
||||
|
@ -82,20 +109,41 @@ void cmUnixMakefile::OutputMakefile(const char* file)
|
|||
}
|
||||
fout << "\n";
|
||||
}
|
||||
if(strlen(this->GetLibraryName()) > 0)
|
||||
{
|
||||
fout << "ME = " << this->GetLibraryName() << "\n\n";
|
||||
fout << "BUILD_LIB_FILE = lib${ME}${ITK_LIB_EXT}\n\n";
|
||||
}
|
||||
|
||||
// Ouput user make text embeded in the input file
|
||||
for(int i =0; i < m_MakeVerbatim.size(); i++)
|
||||
{
|
||||
fout << m_MakeVerbatim[i] << "\n";
|
||||
}
|
||||
fout << "\n\n";
|
||||
|
||||
// Output rules for building executables
|
||||
if( m_Executables )
|
||||
{
|
||||
// collect all the flags needed for linking libraries
|
||||
std::string linkLibs;
|
||||
std::vector<std::string>::iterator j;
|
||||
std::vector<std::string>& libdirs = m_BuildFlags.GetLinkDirectories();
|
||||
for(j = libdirs.begin(); j != libdirs.end(); ++j)
|
||||
{
|
||||
linkLibs += "-L";
|
||||
linkLibs += *j;
|
||||
linkLibs += " ";
|
||||
}
|
||||
std::vector<std::string>& libs = m_BuildFlags.GetLinkLibraries();
|
||||
for(j = libs.begin(); j != libs.end(); ++j)
|
||||
{
|
||||
linkLibs += "-l";
|
||||
linkLibs += *j;
|
||||
linkLibs += " ";
|
||||
}
|
||||
std::vector<std::string>& libsUnix = m_BuildFlags.GetLinkLibrariesUnix();
|
||||
for(j = libsUnix.begin(); j != libsUnix.end(); ++j)
|
||||
{
|
||||
linkLibs += *j;
|
||||
linkLibs += " ";
|
||||
}
|
||||
linkLibs += " ${LOCAL_LINK_FLAGS} ";
|
||||
// Now create rules for all of the executables to be built
|
||||
for(int i = 0; i < m_Classes.size(); i++)
|
||||
{
|
||||
if(!m_Classes[i].m_AbstractClass && !m_Classes[i].m_HeaderFileOnly)
|
||||
|
@ -103,10 +151,13 @@ void cmUnixMakefile::OutputMakefile(const char* file)
|
|||
std::string DotO = m_Classes[i].m_ClassName;
|
||||
DotO += ".o";
|
||||
fout << m_Classes[i].m_ClassName << ": " << DotO << "\n";
|
||||
fout << "\t ${CXX} ${CXX_FLAGS} " << DotO.c_str() << " -o $@ -L${CMAKE_OBJ_DIR}/Code/Common -lITKCommon \\\n"
|
||||
<< "\t-L${CMAKE_OBJ_DIR}/Code/Insight3DParty/vxl -lITKNumerics -lm ${DL_LIBS}\n\n";
|
||||
fout << "\t${CXX} ${CXX_FLAGS} "
|
||||
<< DotO.c_str() << " "
|
||||
<< linkLibs.c_str()
|
||||
<< " -o $@ ""\n\n";
|
||||
}
|
||||
}
|
||||
// ouput the list of executables
|
||||
fout << "EXECUTABLES = \\\n";
|
||||
for(int i = 0; i < m_Classes.size(); i++)
|
||||
{
|
||||
|
@ -122,7 +173,7 @@ void cmUnixMakefile::OutputMakefile(const char* file)
|
|||
}
|
||||
fout << "\n";
|
||||
}
|
||||
|
||||
// Output Sub directory build rules
|
||||
if( m_SubDirectories.size() )
|
||||
{
|
||||
fout << "SUBDIR_BUILD = \\\n";
|
||||
|
|
|
@ -25,7 +25,9 @@
|
|||
class cmUnixMakefile : public cmMakefile
|
||||
{
|
||||
public:
|
||||
// Write the makefile to the named file
|
||||
/**
|
||||
* Write the makefile to the named file
|
||||
*/
|
||||
void OutputMakefile(const char* file);
|
||||
protected:
|
||||
void OutputDepends(std::ostream&);
|
||||
|
|
|
@ -26,10 +26,16 @@
|
|||
class cmWindowsConfigure
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Set the path to the top level of the source directory
|
||||
*/
|
||||
void SetWhereSource(const char* dir)
|
||||
{
|
||||
m_WhereSource = dir;
|
||||
}
|
||||
/**
|
||||
* Set the path to the top level of the build directory
|
||||
*/
|
||||
void SetWhereBuild(const char* dir)
|
||||
{
|
||||
m_WhereBuild = dir;
|
||||
|
|
|
@ -25,8 +25,17 @@
|
|||
class itkVC60Configure : public cmWindowsConfigure
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* implement configure from parent
|
||||
*/
|
||||
virtual void Configure();
|
||||
/**
|
||||
* create the main itk configure file
|
||||
*/
|
||||
virtual void GenerateITKConfigHeader();
|
||||
/**
|
||||
* Create the vnl configure file
|
||||
*/
|
||||
virtual void GenerateVNLConfigHeader();
|
||||
protected:
|
||||
void CopyFileTo(const char* source,
|
||||
|
|
Loading…
Reference in New Issue