Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
CMake
CMake
Commits
639f1fa2
Commit
639f1fa2
authored
May 11, 2001
by
Ken Martin
Browse files
added registry entry support and windows app support
parent
4139f15d
Changes
15
Hide whitespace changes
Inline
Side-by-side
Source/EXEHeader.dsptemplate
View file @
639f1fa2
...
...
@@ -14,7 +14,7 @@
# EXTRA_DEFINES == compiler defines
# OUTPUT_LIBNAME == name of output library
# CM_LIBRARIES == libraries linked in
# TARGTYPE "Win32 (x86) Application" 0x010
1
# TARGTYPE "Win32 (x86) Application" 0x010
3
CFG=OUTPUT_LIBNAME - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
...
...
Source/EXEWinHeader.dsptemplate
0 → 100644
View file @
639f1fa2
# Microsoft Developer Studio Project File - Name="pcbuilder" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# CM DSP Header file
# This file is read by the build system of cm, and is used as the top part of
# a microsoft project dsp header file
# IF this is in a dsp file, then it is not the header, but has
# already been used, so do not edit here...
# variables to REPLACE
#
# BUILD_INCLUDES == include path
# EXTRA_DEFINES == compiler defines
# OUTPUT_LIBNAME == name of output library
# CM_LIBRARIES == libraries linked in
# TARGTYPE "Win32 (x86) Application" 0x0101
CFG=OUTPUT_LIBNAME - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "OUTPUT_LIBNAME.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "OUTPUT_LIBNAME.mak" CFG="OUTPUT_LIBNAME - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "OUTPUT_LIBNAME - Win32 Release" (based on "Win32 (x86) Application")
!MESSAGE "OUTPUT_LIBNAME - Win32 Debug" (based on "Win32 (x86) Application")
!MESSAGE "OUTPUT_LIBNAME - Win32 Release MinSize" (based on "Win32 (x86) Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "OUTPUT_LIBNAME - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GR /GX /Zm1000 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
# ADD CPP /nologo /MD /W3 /GR /GX /Zm1000 /O2 /D "WIN32" BUILD_INCLUDES EXTRA_DEFINES /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /IGNORE:4089
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /IGNORE:4089
CM_MULTILINE_OPTIMIZED_LIBRARIES
CM_MULTILINE_LIBRARIES
!ELSEIF "$(CFG)" == "OUTPUT_LIBNAME - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
# ADD BASE CPP /W3 /GR /Zm1000 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /FD /GZ /c
# ADD CPP /nologo /W3 /MDd /GR /Gm /GX /Zm1000 /ZI /Od /D "WIN32" BUILD_INCLUDES EXTRA_DEFINES /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /FD /GZ /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept /IGNORE:4089
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept /IGNORE:4089
CM_MULTILINE_DEBUG_LIBRARIES
CM_MULTILINE_LIBRARIES
!ELSEIF "$(CFG)" == "OUTPUT_LIBNAME - Win32 Release MinSize"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "ReleaseMinSize"
# PROP BASE Intermediate_Dir "ReleaseMinSize"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "ReleaseMinSize"
# PROP Intermediate_Dir "ReleaseMinSize"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /GR /GX /Zm1000 /O1 /Gs /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
# ADD CPP /nologo /MD /W3 /GR /GX /Zm1000 /O1 /Gs /D "WIN32" BUILD_INCLUDES EXTRA_DEFINES /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept /IGNORE:4089
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept /IGNORE:4089
CM_MULTILINE_OPTIMIZED_LIBRARIES
CM_MULTILINE_LIBRARIES
!ENDIF
# Begin Target
# Name "OUTPUT_LIBNAME - Win32 Release"
# Name "OUTPUT_LIBNAME - Win32 Debug"
# Name "OUTPUT_LIBNAME - Win32 Release MinSize"
Source/cmAddExecutableCommand.cxx
View file @
639f1fa2
...
...
@@ -49,11 +49,21 @@ bool cmAddExecutableCommand::Invoke(std::vector<std::string>& args)
this
->
SetError
(
"called with incorrect number of arguments"
);
return
false
;
}
std
::
vector
<
std
::
string
>::
iterator
s
=
args
.
begin
();
std
::
vector
<
std
::
string
>
srclists
(
++
s
,
args
.
end
());
++
s
;
if
(
*
s
==
"WIN32"
)
{
++
s
;
std
::
vector
<
std
::
string
>
srclists
(
s
,
args
.
end
());
m_Makefile
->
AddExecutable
(
args
[
0
].
c_str
(),
srclists
,
true
);
}
else
{
std
::
vector
<
std
::
string
>
srclists
(
s
,
args
.
end
());
m_Makefile
->
AddExecutable
(
args
[
0
].
c_str
(),
srclists
,
false
);
}
m_Makefile
->
AddExecutable
(
args
[
0
].
c_str
(),
srclists
);
return
true
;
}
Source/cmAddExecutableCommand.h
View file @
639f1fa2
...
...
@@ -86,7 +86,13 @@ public:
virtual
const
char
*
GetFullDocumentation
()
{
return
"ADD_EXECUTABLE(exename srclist srclist srclist ...)"
;
"ADD_EXECUTABLE(exename srclist srclist srclist ...)
\n
"
"ADD_EXECUTABLE(exename WIN32 srclist srclist srclist ...)"
"This command adds an executable target to the current directory. "
"The executable will be built from the source files / source lists "
"specified. The second argument to this command can be WIN32 "
"which indicates that the executable (when compiled on windows) "
"is a windows app (using WinMain)not a console app (using main)."
;
}
cmTypeMacro
(
cmAddExecutableCommand
,
cmCommand
);
...
...
Source/cmDSPMakefile.cxx
View file @
639f1fa2
...
...
@@ -100,6 +100,9 @@ void cmDSPMakefile::OutputDSPFile()
case
cmTarget
::
EXECUTABLE
:
this
->
SetBuildType
(
EXECUTABLE
,
l
->
first
.
c_str
());
break
;
case
cmTarget
::
WIN32_EXECUTABLE
:
this
->
SetBuildType
(
WIN32_EXECUTABLE
,
l
->
first
.
c_str
());
break
;
case
cmTarget
::
UTILITY
:
this
->
SetBuildType
(
UTILITY
,
l
->
first
.
c_str
());
break
;
...
...
@@ -390,6 +393,12 @@ void cmDSPMakefile::SetBuildType(BuildType b, const char *libName)
m_DSPFooterTemplate
=
root
;
m_DSPFooterTemplate
+=
"/EXEFooter.dsptemplate"
;
break
;
case
WIN32_EXECUTABLE
:
m_DSPHeaderTemplate
=
m_Makefile
->
GetHomeDirectory
();
m_DSPHeaderTemplate
+=
"/CMake/Source/EXEWinHeader.dsptemplate"
;
m_DSPFooterTemplate
=
m_Makefile
->
GetHomeDirectory
();
m_DSPFooterTemplate
+=
"/CMake/Source/EXEFooter.dsptemplate"
;
break
;
case
UTILITY
:
m_DSPHeaderTemplate
=
root
;
m_DSPHeaderTemplate
+=
"/UtilityHeader.dsptemplate"
;
...
...
@@ -461,7 +470,7 @@ void cmDSPMakefile::WriteDSPHeader(std::ostream& fout, const char *libName,
{
// add libraries to executables and dlls (but never include
// a library in a library, bad recursion)
if
(
!
(
target
.
GetType
()
=
=
cmTarget
::
LIBRARY
)
||
if
(
target
.
GetType
()
!
=
cmTarget
::
LIBRARY
||
(
m_LibraryBuildType
==
DLL
&&
libName
!=
j
->
first
))
{
std
::
string
lib
=
j
->
first
;
...
...
Source/cmDSPMakefile.h
View file @
639f1fa2
...
...
@@ -57,7 +57,7 @@ public:
cmDSPMakefile
(
cmMakefile
*
);
~
cmDSPMakefile
();
void
OutputDSPFile
();
enum
BuildType
{
STATIC_LIBRARY
,
DLL
,
EXECUTABLE
,
UTILITY
};
enum
BuildType
{
STATIC_LIBRARY
,
DLL
,
EXECUTABLE
,
WIN32_EXECUTABLE
,
UTILITY
};
/**
* Specify the type of the build: static, dll, or executable.
...
...
Source/cmDSPWriter.cxx
View file @
639f1fa2
...
...
@@ -100,6 +100,9 @@ void cmDSPMakefile::OutputDSPFile()
case
cmTarget
::
EXECUTABLE
:
this
->
SetBuildType
(
EXECUTABLE
,
l
->
first
.
c_str
());
break
;
case
cmTarget
::
WIN32_EXECUTABLE
:
this
->
SetBuildType
(
WIN32_EXECUTABLE
,
l
->
first
.
c_str
());
break
;
case
cmTarget
::
UTILITY
:
this
->
SetBuildType
(
UTILITY
,
l
->
first
.
c_str
());
break
;
...
...
@@ -390,6 +393,12 @@ void cmDSPMakefile::SetBuildType(BuildType b, const char *libName)
m_DSPFooterTemplate
=
root
;
m_DSPFooterTemplate
+=
"/EXEFooter.dsptemplate"
;
break
;
case
WIN32_EXECUTABLE
:
m_DSPHeaderTemplate
=
m_Makefile
->
GetHomeDirectory
();
m_DSPHeaderTemplate
+=
"/CMake/Source/EXEWinHeader.dsptemplate"
;
m_DSPFooterTemplate
=
m_Makefile
->
GetHomeDirectory
();
m_DSPFooterTemplate
+=
"/CMake/Source/EXEFooter.dsptemplate"
;
break
;
case
UTILITY
:
m_DSPHeaderTemplate
=
root
;
m_DSPHeaderTemplate
+=
"/UtilityHeader.dsptemplate"
;
...
...
@@ -461,7 +470,7 @@ void cmDSPMakefile::WriteDSPHeader(std::ostream& fout, const char *libName,
{
// add libraries to executables and dlls (but never include
// a library in a library, bad recursion)
if
(
!
(
target
.
GetType
()
=
=
cmTarget
::
LIBRARY
)
||
if
(
target
.
GetType
()
!
=
cmTarget
::
LIBRARY
||
(
m_LibraryBuildType
==
DLL
&&
libName
!=
j
->
first
))
{
std
::
string
lib
=
j
->
first
;
...
...
Source/cmDSPWriter.h
View file @
639f1fa2
...
...
@@ -57,7 +57,7 @@ public:
cmDSPMakefile
(
cmMakefile
*
);
~
cmDSPMakefile
();
void
OutputDSPFile
();
enum
BuildType
{
STATIC_LIBRARY
,
DLL
,
EXECUTABLE
,
UTILITY
};
enum
BuildType
{
STATIC_LIBRARY
,
DLL
,
EXECUTABLE
,
WIN32_EXECUTABLE
,
UTILITY
};
/**
* Specify the type of the build: static, dll, or executable.
...
...
Source/cmFindLibraryCommand.cxx
View file @
639f1fa2
...
...
@@ -90,6 +90,7 @@ bool cmFindLibraryCommand::Invoke(std::vector<std::string>& args)
}
else
{
cmSystemTools
::
ExpandRegistryValues
(
args
[
j
]);
path
.
push_back
(
args
[
j
]);
}
}
...
...
@@ -106,6 +107,7 @@ bool cmFindLibraryCommand::Invoke(std::vector<std::string>& args)
// expand variables
std
::
string
exp
=
args
[
j
];
m_Makefile
->
ExpandVariablesInString
(
exp
);
cmSystemTools
::
ExpandRegistryValues
(
exp
);
path
.
push_back
(
exp
);
}
}
...
...
Source/cmFindPathCommand.cxx
View file @
639f1fa2
...
...
@@ -73,6 +73,7 @@ bool cmFindPathCommand::Invoke(std::vector<std::string>& args)
// expand variables
std
::
string
exp
=
args
[
j
];
m_Makefile
->
ExpandVariablesInString
(
exp
);
cmSystemTools
::
ExpandRegistryValues
(
exp
);
path
.
push_back
(
exp
);
}
...
...
Source/cmMakefile.cxx
View file @
639f1fa2
...
...
@@ -483,9 +483,23 @@ void cmMakefile::AddLibrary(const char* lname, const std::vector<std::string> &s
void
cmMakefile
::
AddExecutable
(
const
char
*
exeName
,
const
std
::
vector
<
std
::
string
>
&
srcs
)
{
this
->
AddExecutable
(
exeName
,
srcs
,
false
);
}
void
cmMakefile
::
AddExecutable
(
const
char
*
exeName
,
const
std
::
vector
<
std
::
string
>
&
srcs
,
bool
win32
)
{
cmTarget
target
;
target
.
SetType
(
cmTarget
::
EXECUTABLE
);
if
(
win32
)
{
target
.
SetType
(
cmTarget
::
WIN32_EXECUTABLE
);
}
else
{
target
.
SetType
(
cmTarget
::
EXECUTABLE
);
}
target
.
SetInAll
(
true
);
target
.
GetSourceLists
()
=
srcs
;
m_Targets
.
insert
(
cmTargets
::
value_type
(
exeName
,
target
));
...
...
Source/cmMakefile.h
View file @
639f1fa2
...
...
@@ -133,7 +133,10 @@ public:
/**
* Add an executable to the build.
*/
void
AddExecutable
(
const
char
*
exename
,
const
std
::
vector
<
std
::
string
>
&
srcs
);
void
AddExecutable
(
const
char
*
exename
,
const
std
::
vector
<
std
::
string
>
&
srcs
);
void
AddExecutable
(
const
char
*
exename
,
const
std
::
vector
<
std
::
string
>
&
srcs
,
bool
win32
);
/**
* Add a utility to the build. A utiltity target is
...
...
Source/cmSystemTools.cxx
View file @
639f1fa2
...
...
@@ -176,6 +176,96 @@ void cmSystemTools::ReplaceString(std::string& source,
}
}
#ifdef _WIN32
bool
ReadAValue
(
std
::
string
&
res
,
const
char
*
key
)
{
// find the primary key
std
::
string
primary
=
key
;
std
::
string
second
=
key
;
size_t
start
=
primary
.
find
(
"
\\
"
);
if
(
start
==
std
::
string
::
npos
)
{
return
false
;
}
primary
=
primary
.
substr
(
0
,
start
);
second
=
second
.
substr
(
++
start
);
HKEY
primaryKey
;
if
(
primary
==
"HKEY_CURRENT_USER"
)
{
primaryKey
=
HKEY_CURRENT_USER
;
}
if
(
primary
==
"HKEY_CURRENT_CONFIG"
)
{
primaryKey
=
HKEY_CURRENT_CONFIG
;
}
if
(
primary
==
"HKEY_CLASSES_ROOT"
)
{
primaryKey
=
HKEY_CLASSES_ROOT
;
}
if
(
primary
==
"HKEY_LOCAL_MACHINE"
)
{
primaryKey
=
HKEY_LOCAL_MACHINE
;
}
if
(
primary
==
"HKEY_USERS"
)
{
primaryKey
=
HKEY_USERS
;
}
HKEY
hKey
;
if
(
RegOpenKeyEx
(
primaryKey
,
second
.
c_str
(),
0
,
KEY_READ
,
&
hKey
)
!=
ERROR_SUCCESS
)
{
return
false
;
}
else
{
DWORD
dwType
,
dwSize
;
dwSize
=
1023
;
char
val
[
1024
];
if
(
RegQueryValueEx
(
hKey
,
NULL
,
NULL
,
&
dwType
,
(
BYTE
*
)
val
,
&
dwSize
)
==
ERROR_SUCCESS
)
{
if
(
dwType
==
REG_SZ
)
{
res
=
val
;
return
true
;
}
}
}
return
false
;
}
#endif
// replace replace with with as many times as it shows up in source.
// write the result into source.
void
cmSystemTools
::
ExpandRegistryValues
(
std
::
string
&
source
)
{
#if _WIN32
cmRegularExpression
regEntry
(
"
\\
[(HKEY[A-Za-z_0-9
\\
.
\\\\
]*)
\\
]"
);
// check for black line or comment
while
(
regEntry
.
find
(
source
))
{
// the arguments are the second match
std
::
string
key
=
regEntry
.
match
(
1
);
std
::
string
val
;
if
(
ReadAValue
(
val
,
key
.
c_str
()))
{
std
::
string
reg
=
"["
;
reg
+=
key
+
"]"
;
cmSystemTools
::
ReplaceString
(
source
,
reg
.
c_str
(),
val
.
c_str
());
}
else
{
std
::
string
reg
=
"["
;
reg
+=
key
+
"]"
;
cmSystemTools
::
ReplaceString
(
source
,
reg
.
c_str
(),
"/registry"
);
}
}
#endif
}
std
::
string
cmSystemTools
::
EscapeSpaces
(
const
char
*
str
)
{
...
...
Source/cmSystemTools.h
View file @
639f1fa2
...
...
@@ -67,6 +67,11 @@ public:
const
char
*
replace
,
const
char
*
with
);
/**
* Look for and replace registry values in a string
*/
static
void
ExpandRegistryValues
(
std
::
string
&
source
);
/**
* Return a string equivalent to the input string, but with all " " replaced
* with "\ " to escape the spaces.
...
...
Source/cmUnixMakefileGenerator.cxx
View file @
639f1fa2
...
...
@@ -129,8 +129,9 @@ void cmUnixMakefileGenerator::OutputTargetRules(std::ostream& fout)
for
(
cmTargets
::
const_iterator
l
=
tgts
.
begin
();
l
!=
tgts
.
end
();
l
++
)
{
if
(
l
->
second
.
GetType
()
==
cmTarget
::
EXECUTABLE
&&
l
->
second
.
IsInAll
())
if
((
l
->
second
.
GetType
()
==
cmTarget
::
EXECUTABLE
||
l
->
second
.
GetType
()
==
cmTarget
::
WIN32_EXECUTABLE
)
&&
l
->
second
.
IsInAll
())
{
fout
<<
"
\\\n
"
<<
l
->
first
.
c_str
();
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment