Can define entry symbol type.

pull/15/head
Jussi Pakkanen 11 years ago
parent 5e50403d3f
commit d30c7b5968
  1. 6
      backends.py
  2. 6
      build.py
  3. 2
      test cases/windows/2 winmain/meson.build
  4. 2
      test cases/windows/4 winmaincpp/meson.build

@ -1366,6 +1366,7 @@ class Vs2010Backend(Backend):
proj_to_src_root = os.path.join(down, self.build_to_src) proj_to_src_root = os.path.join(down, self.build_to_src)
proj_to_src_dir = os.path.join(proj_to_src_root, target.subdir) proj_to_src_dir = os.path.join(proj_to_src_root, target.subdir)
(sources, headers) = self.split_sources(target.sources) (sources, headers) = self.split_sources(target.sources)
entrypoint = 'WinMainCRTStartup'
buildtype = 'Debug' buildtype = 'Debug'
platform = "Win32" platform = "Win32"
project_name = target.name project_name = target.name
@ -1373,11 +1374,14 @@ class Vs2010Backend(Backend):
subsystem = 'Windows' subsystem = 'Windows'
if isinstance(target, build.Executable): if isinstance(target, build.Executable):
conftype = 'Application' conftype = 'Application'
if not target.gui_app:
subsystem = 'Console' subsystem = 'Console'
entrypoint = 'mainCRTStartup'
elif isinstance(target, build.StaticLibrary): elif isinstance(target, build.StaticLibrary):
conftype = 'StaticLibrary' conftype = 'StaticLibrary'
elif isinstance(target, build.SharedLibrary): elif isinstance(target, build.SharedLibrary):
conftype = 'DynamicLibrary' conftype = 'DynamicLibrary'
entrypoint = '_DllMainCrtStartup'
else: else:
raise MesonException('Unknown target type for %s' % target_name) raise MesonException('Unknown target type for %s' % target_name)
root = ET.Element('Project', {'DefaultTargets' : "Build", root = ET.Element('Project', {'DefaultTargets' : "Build",
@ -1485,7 +1489,7 @@ class Vs2010Backend(Backend):
pdb = ET.SubElement(link, 'ProgramDataBaseFileName') pdb = ET.SubElement(link, 'ProgramDataBaseFileName')
pdb.text = '$(OutDir}%s.pdb' % target_name pdb.text = '$(OutDir}%s.pdb' % target_name
if isinstance(target, build.Executable): if isinstance(target, build.Executable):
ET.SubElement(link, 'EntryPointSymbol').text = 'mainCRTStartup' ET.SubElement(link, 'EntryPointSymbol').text = entrypoint
targetmachine = ET.SubElement(link, 'TargetMachine') targetmachine = ET.SubElement(link, 'TargetMachine')
targetmachine.text = 'MachineX86' targetmachine.text = 'MachineX86'

@ -266,6 +266,12 @@ class BuildTarget():
if not isinstance(main_class, str): if not isinstance(main_class, str):
raise InvalidArguments('Main class must be a string') raise InvalidArguments('Main class must be a string')
self.main_class = main_class self.main_class = main_class
if isinstance(self, Executable):
self.gui_app = kwargs.get('gui_app', False)
if not isinstance(self.gui_app, bool):
raise InvalidArguments('Argument gui_app must be boolean.')
elif 'gui_app' in kwargs:
raise InvalidArguments('Argument gui_app can only be used on executables.')
def get_subdir(self): def get_subdir(self):
return self.subdir return self.subdir

@ -1,4 +1,4 @@
project('winmain', 'c') project('winmain', 'c')
exe = executable('prog', 'prog.c') exe = executable('prog', 'prog.c', gui_app : true)
test('winmain', exe) test('winmain', exe)

@ -1,4 +1,4 @@
project('winmaincpp', 'cpp') project('winmaincpp', 'cpp')
exe = executable('prog', 'prog.cpp') exe = executable('prog', 'prog.cpp', gui_app : true)
test('winmaincpp', exe) test('winmaincpp', exe)

Loading…
Cancel
Save