665 |
665 |
666 |
666 |
667 class buildhgexe(build_ext): |
667 class buildhgexe(build_ext): |
668 description = 'compile hg.exe from mercurial/exewrapper.c' |
668 description = 'compile hg.exe from mercurial/exewrapper.c' |
669 |
669 |
670 LONG_PATHS_MANIFEST = """ |
670 LONG_PATHS_MANIFEST = """\ |
671 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
671 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
672 <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> |
672 <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> |
673 <application> |
673 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> |
674 <windowsSettings |
674 <security> |
675 xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings"> |
675 <requestedPrivileges> |
676 <ws2:longPathAware>true</ws2:longPathAware> |
676 <requestedExecutionLevel |
677 </windowsSettings> |
677 level="asInvoker" |
678 </application> |
678 uiAccess="false" |
679 </assembly>""" |
679 /> |
|
680 </requestedPrivileges> |
|
681 </security> |
|
682 </trustInfo> |
|
683 <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> |
|
684 <application> |
|
685 <!-- Windows Vista --> |
|
686 <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> |
|
687 <!-- Windows 7 --> |
|
688 <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> |
|
689 <!-- Windows 8 --> |
|
690 <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> |
|
691 <!-- Windows 8.1 --> |
|
692 <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> |
|
693 <!-- Windows 10 and Windows 11 --> |
|
694 <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/> |
|
695 </application> |
|
696 </compatibility> |
|
697 <application xmlns="urn:schemas-microsoft-com:asm.v3"> |
|
698 <windowsSettings |
|
699 xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings"> |
|
700 <ws2:longPathAware>true</ws2:longPathAware> |
|
701 </windowsSettings> |
|
702 </application> |
|
703 <dependency> |
|
704 <dependentAssembly> |
|
705 <assemblyIdentity type="win32" |
|
706 name="Microsoft.Windows.Common-Controls" |
|
707 version="6.0.0.0" |
|
708 processorArchitecture="*" |
|
709 publicKeyToken="6595b64144ccf1df" |
|
710 language="*" /> |
|
711 </dependentAssembly> |
|
712 </dependency> |
|
713 </assembly> |
|
714 """ |
680 |
715 |
681 def initialize_options(self): |
716 def initialize_options(self): |
682 build_ext.initialize_options(self) |
717 build_ext.initialize_options(self) |
683 |
718 |
684 def build_extensions(self): |
719 def build_extensions(self): |
774 wasn't able to find an explanation for mortals. But it seems to work. |
809 wasn't able to find an explanation for mortals. But it seems to work. |
775 """ |
810 """ |
776 exefname = self.compiler.executable_filename(self.hgtarget) |
811 exefname = self.compiler.executable_filename(self.hgtarget) |
777 fdauto, manfname = tempfile.mkstemp(suffix='.hg.exe.manifest') |
812 fdauto, manfname = tempfile.mkstemp(suffix='.hg.exe.manifest') |
778 os.close(fdauto) |
813 os.close(fdauto) |
779 with open(manfname, 'w') as f: |
814 with open(manfname, 'w', encoding="UTF-8") as f: |
780 f.write(self.LONG_PATHS_MANIFEST) |
815 f.write(self.LONG_PATHS_MANIFEST) |
781 log.info("long paths manifest is written to '%s'" % manfname) |
816 log.info("long paths manifest is written to '%s'" % manfname) |
782 inputresource = '-inputresource:%s;#1' % exefname |
|
783 outputresource = '-outputresource:%s;#1' % exefname |
817 outputresource = '-outputresource:%s;#1' % exefname |
784 log.info("running mt.exe to update hg.exe's manifest in-place") |
818 log.info("running mt.exe to update hg.exe's manifest in-place") |
785 # supplying both -manifest and -inputresource to mt.exe makes |
819 |
786 # it merge the embedded and supplied manifests in the -outputresource |
|
787 self.spawn( |
820 self.spawn( |
788 [ |
821 [ |
789 self.compiler.mt, |
822 self.compiler.mt, |
790 '-nologo', |
823 '-nologo', |
791 '-manifest', |
824 '-manifest', |
792 manfname, |
825 manfname, |
793 inputresource, |
|
794 outputresource, |
826 outputresource, |
795 ] |
827 ] |
796 ) |
828 ) |
797 log.info("done updating hg.exe's manifest") |
829 log.info("done updating hg.exe's manifest") |
798 os.remove(manfname) |
830 os.remove(manfname) |