From: Richard W.M. Jones <"Richard W.M. Jones "> Date: Sat, 21 Feb 2009 17:21:32 +0000 (+0000) Subject: nsis, nsiswrapper moved to Fedora. X-Git-Url: http://git.annexia.org/?a=commitdiff_plain;h=c10803d738786a6f772f3d5fdf4d3aa8226a6d56;p=fedora-mingw.git nsis, nsiswrapper moved to Fedora. --- diff --git a/nsis/mingw32-nsis.spec b/nsis/mingw32-nsis.spec deleted file mode 100644 index 76b94d3..0000000 --- a/nsis/mingw32-nsis.spec +++ /dev/null @@ -1,94 +0,0 @@ -%define sconsopts VERSION=%{version} PREFIX=%{_prefix} PREFIX_CONF=%{_sysconfdir} SKIPPLUGINS=System DEBUG_SYMBOLS=1 OPTS=1 -%define _default_patch_fuzz 2 - -Name: mingw32-nsis -Version: 2.43 -Release: 2%{?dist} -Summary: Nullsoft Scriptable Install System - -License: zlib and CPL -Group: Development/Libraries -URL: http://nsis.sourceforge.net/ -Source0: http://dl.sourceforge.net/sourceforge/nsis/nsis-%{version}-src.tar.bz2 -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) - -# Patches from Debian (mainly by Paul Wise). -Patch0: nsis-2.42-debian-64bit-fixes.patch -Patch1: nsis-2.43-debian-debug-opt.patch - -BuildRequires: mingw32-filesystem >= 40 -BuildRequires: mingw32-gcc -BuildRequires: mingw32-gcc-c++ -BuildRequires: mingw32-binutils -BuildRequires: python -BuildRequires: scons - -# since nsis a 32 bit only apps -#ExclusiveArch: %{ix86} ppc -#BuildRequires: wxGTK-devel -# The above is only required for Koji. In mock we _can_ build on -# x86_64 provided we have the 32 bit libraries required by the next -# two lines. -BuildRequires: /usr/include/gnu/stubs-32.h -BuildRequires: /usr/lib/libwx_baseu-2.8.so - - -%description -NSIS, the Nullsoft Scriptable Install System, is a script-driven -Windows installation system. - -This package includes native Fedora binaries of makensis (etc.) and -all plugins except for System.dll. The System.dll plugin cannot be -built natively at this time since it includes inline Microsoft -assembler code. - - -%prep -%setup -q -n nsis-%{version}-src - -%patch0 -p1 -b .64bit -%patch1 -p1 -b .debug - - -%build -scons %{sconsopts} - - -%install -rm -rf $RPM_BUILD_ROOT - -mkdir $RPM_BUILD_ROOT -scons %{sconsopts} PREFIX_DEST=$RPM_BUILD_ROOT install - -mv $RPM_BUILD_ROOT%{_docdir}/nsis $RPM_BUILD_ROOT%{_docdir}/%{name}-%{version} - - -%clean -rm -rf $RPM_BUILD_ROOT - - -%files -%defattr(-,root,root) -%doc %{_docdir}/%{name}-%{version} -%config(noreplace) %{_sysconfdir}/nsisconf.nsh -%{_bindir}/* -#{_includedir}/nsis -%{_datadir}/nsis - - -%changelog -* Fri Feb 20 2009 Richard W.M. Jones - 2.43-2 -- Rebuild for mingw32-gcc 4.4 - -* Fri Feb 13 2009 Levente Farkas - 2.43-1 -- update to the latest upstream - -* Wed Jan 14 2009 Levente Farkas - 2.42-1 -- update to the latest upstream -- a few small changes - -* Fri Oct 17 2008 Richard W.M. Jones - 2.39-5 -- Fix the Summary line. - -* Wed Oct 8 2008 Richard W.M. Jones - 2.39-4 -- Initial RPM release. diff --git a/nsis/nsis-2.19-mingw-search.patch b/nsis/nsis-2.19-mingw-search.patch deleted file mode 100644 index 021e1df..0000000 --- a/nsis/nsis-2.19-mingw-search.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- nsis-2.19-src/SCons/Tools/crossmingw.py.orig 2006-02-24 16:19:55.000000000 +0000 -+++ nsis-2.19-src/SCons/Tools/crossmingw.py 2008-09-22 12:03:34.000000000 +0100 -@@ -44,6 +44,7 @@ - - # This is what we search for to find mingw: - prefixes = SCons.Util.Split(""" -+ i686-pc-mingw32- - mingw32- - mingw32msvc- - i386-mingw32- diff --git a/nsis/nsis-2.42-debian-64bit-fixes.patch b/nsis/nsis-2.42-debian-64bit-fixes.patch deleted file mode 100644 index b46f7e8..0000000 --- a/nsis/nsis-2.42-debian-64bit-fixes.patch +++ /dev/null @@ -1,186 +0,0 @@ ---- ./Source/Plugins.cpp.lfarkas 2009-01-14 17:03:11.000000000 +0100 -+++ ./Source/Plugins.cpp 2009-01-14 17:03:58.000000000 +0100 -@@ -136,7 +136,7 @@ - DWORD prd = FIX_ENDIAN_INT32(sections[i].PointerToRawData); - PIMAGE_EXPORT_DIRECTORY exports = PIMAGE_EXPORT_DIRECTORY(&dlldata[0] + prd + ExportDirVA - va); - DWORD na = FIX_ENDIAN_INT32(exports->AddressOfNames); -- unsigned long *names = (unsigned long*)((unsigned long) exports + (char *) na - ExportDirVA); -+ unsigned int *names = (unsigned int*)((unsigned long) exports + (char *) na - ExportDirVA); - for (unsigned long j = 0; j < FIX_ENDIAN_INT32(exports->NumberOfNames); j++) - { - const string name = string((char*)exports + FIX_ENDIAN_INT32(names[j]) - ExportDirVA); ---- ./Source/ResourceEditor.cpp.lfarkas 2009-01-14 17:04:08.000000000 +0100 -+++ ./Source/ResourceEditor.cpp 2009-01-14 17:07:47.000000000 +0100 -@@ -665,7 +665,7 @@ - rdDir.NumberOfIdEntries = ConvertEndianness(rdDir.NumberOfIdEntries); - - CopyMemory(seeker, &rdDir, sizeof(IMAGE_RESOURCE_DIRECTORY)); -- crd->m_dwWrittenAt = DWORD(seeker); -+ crd->m_dwWrittenAt = long(seeker); - seeker += sizeof(IMAGE_RESOURCE_DIRECTORY); - - for (int i = 0; i < crd->CountEntries(); i++) { -@@ -686,7 +686,7 @@ - rDirE.UName.NameString.NameIsString = (crd->GetEntry(i)->HasName()) ? 1 : 0; - - CopyMemory(seeker, &rDirE, sizeof(MY_IMAGE_RESOURCE_DIRECTORY_ENTRY)); -- crd->GetEntry(i)->m_dwWrittenAt = DWORD(seeker); -+ crd->GetEntry(i)->m_dwWrittenAt = long(seeker); - seeker += sizeof(MY_IMAGE_RESOURCE_DIRECTORY_ENTRY); - } - qDirs.pop(); -@@ -702,7 +702,7 @@ - rDataE.Size = ConvertEndianness(cRDataE->GetSize()); - - CopyMemory(seeker, &rDataE, sizeof(IMAGE_RESOURCE_DATA_ENTRY)); -- cRDataE->m_dwWrittenAt = DWORD(seeker); -+ cRDataE->m_dwWrittenAt = long(seeker); - seeker += sizeof(IMAGE_RESOURCE_DATA_ENTRY); - - qDataEntries.pop(); -@@ -714,7 +714,7 @@ - while (!qStrings.empty()) { - CResourceDirectoryEntry* cRDirE = qStrings.front(); - -- PMY_IMAGE_RESOURCE_DIRECTORY_ENTRY(cRDirE->m_dwWrittenAt)->UName.NameString.NameOffset = ConvertEndianness(DWORD(seeker) - DWORD(pbRsrcSec)); -+ PMY_IMAGE_RESOURCE_DIRECTORY_ENTRY(cRDirE->m_dwWrittenAt)->UName.NameString.NameOffset = ConvertEndianness(long(seeker) - long(pbRsrcSec)); - - WCHAR* szName = cRDirE->GetName(); - WORD iLen = winchar_strlen(szName) + 1; -@@ -745,7 +745,7 @@ - /* - * Set all of the directory entries offsets. - */ -- SetOffsets(m_cResDir, DWORD(pbRsrcSec)); -+ SetOffsets(m_cResDir, long(pbRsrcSec)); - } - - // Sets the offsets in directory entries -@@ -868,7 +868,7 @@ - // Returns -1 if can not be found - int CResourceDirectory::Find(WCHAR* szName) { - if (IS_INTRESOURCE(szName)) -- return Find((WORD) (DWORD) szName); -+ return Find((WORD) (long) szName); - else - if (szName[0] == '#') - return Find(WORD(winchar_stoi(szName + 1))); -@@ -946,7 +946,7 @@ - if (IS_INTRESOURCE(szName)) { - m_bHasName = false; - m_szName = 0; -- m_wId = (WORD) (DWORD) szName; -+ m_wId = (WORD) (long) szName; - } - else { - m_bHasName = true; -@@ -960,7 +960,7 @@ - if (IS_INTRESOURCE(szName)) { - m_bHasName = false; - m_szName = 0; -- m_wId = (WORD) (DWORD) szName; -+ m_wId = (WORD) (long) szName; - } - else { - m_bHasName = true; ---- ./Source/DialogTemplate.cpp.lfarkas 2009-01-14 16:56:31.000000000 +0100 -+++ ./Source/DialogTemplate.cpp 2009-01-14 17:01:14.000000000 +0100 -@@ -74,7 +74,7 @@ - if (IS_INTRESOURCE(x)) { \ - *(WORD*)seeker = 0xFFFF; \ - seeker += sizeof(WORD); \ -- *(WORD*)seeker = ConvertEndianness(WORD(DWORD(x))); \ -+ *(WORD*)seeker = ConvertEndianness(WORD(long(x))); \ - seeker += sizeof(WORD); \ - } \ - else { \ -@@ -622,7 +622,7 @@ - } - } - -- assert((DWORD) seeker - (DWORD) pbDlg == dwSize); -+ assert((long) seeker - (long) pbDlg == dwSize); - - // DONE! - return pbDlg; ---- ./Source/mmap.cpp.lfarkas 2009-01-14 17:00:12.000000000 +0100 -+++ ./Source/mmap.cpp 2009-01-14 17:01:36.000000000 +0100 -@@ -322,7 +322,7 @@ - if (!pView) - return; - -- unsigned int alignment = ((unsigned int)pView) % m_iAllocationGranularity; -+ unsigned int alignment = ((unsigned long)pView) % m_iAllocationGranularity; - pView = (char *)pView - alignment; - size += alignment; - #ifdef _WIN32 ---- ./Source/util.cpp.lfarkas 2009-01-14 17:07:59.000000000 +0100 -+++ ./Source/util.cpp 2009-01-14 17:09:25.000000000 +0100 -@@ -75,9 +75,9 @@ - } - - if (width != 0) { -- LONG biWidth; -+ DWORD biWidth; - fseek(f, 18, SEEK_SET); // Seek to the width member of the header -- fread(&biWidth, sizeof(LONG), 1, f); -+ fread(&biWidth, sizeof(DWORD), 1, f); - FIX_ENDIAN_INT32_INPLACE(biWidth); - if (width != biWidth) { - fclose(f); -@@ -86,12 +86,12 @@ - } - - if (height != 0) { -- LONG biHeight; -+ DWORD biHeight; - fseek(f, 22, SEEK_SET); // Seek to the height member of the header -- fread(&biHeight, sizeof(LONG), 1, f); -+ fread(&biHeight, sizeof(DWORD), 1, f); - FIX_ENDIAN_INT32_INPLACE(biHeight); - // Bitmap height can be negative too... -- if (height != abs(biHeight)) { -+ if (height != abs((long int)biHeight)) { - fclose(f); - return -3; - } ---- ./Source/Platform.h.lfarkas 2009-01-14 17:01:43.000000000 +0100 -+++ ./Source/Platform.h 2009-01-14 17:03:03.000000000 +0100 -@@ -165,7 +165,7 @@ - # define MAKEINTRESOURCE MAKEINTRESOURCEA - # endif - # ifndef IMAGE_FIRST_SECTION --# define IMAGE_FIRST_SECTION(h) ( PIMAGE_SECTION_HEADER( (DWORD) h + \ -+# define IMAGE_FIRST_SECTION(h) ( PIMAGE_SECTION_HEADER( (long) h + \ - FIELD_OFFSET(IMAGE_NT_HEADERS, OptionalHeader) + \ - FIX_ENDIAN_INT16(PIMAGE_NT_HEADERS(h)->FileHeader.SizeOfOptionalHeader) ) ) - # endif -@@ -197,7 +197,7 @@ - #endif - - #ifndef ULONG_PTR --# define ULONG_PTR DWORD -+# define ULONG_PTR ULONG - #endif - - #ifndef IDC_HAND -@@ -702,7 +702,7 @@ - WORD e_oemid; - WORD e_oeminfo; - WORD e_res2[10]; -- LONG e_lfanew; -+ DWORD e_lfanew; - } IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER; - # pragma pack() - # pragma pack(4) ---- ./SCons/Config/gnu.lfarkas 2009-01-14 16:55:33.000000000 +0100 -+++ ./SCons/Config/gnu 2009-01-14 16:56:21.000000000 +0100 -@@ -90,8 +90,6 @@ - makensis_env.Append(CXXFLAGS = ['-Wno-non-virtual-dtor']) # ignore virtual dtor warnings - - conf = FlagsConfigure(makensis_env) --conf.CheckCompileFlag('-m32') # --conf.CheckLinkFlag('-m32') # - conf.CheckLinkFlag('$MAP_FLAG') # generate map file - if not defenv['DEBUG'] and defenv['STRIP'] and defenv['STRIP_CP']: - TestStrip(conf) # strip diff --git a/nsis/nsis-2.43-debian-debug-opt.patch b/nsis/nsis-2.43-debian-debug-opt.patch deleted file mode 100644 index ca31827..0000000 --- a/nsis/nsis-2.43-debian-debug-opt.patch +++ /dev/null @@ -1,116 +0,0 @@ -diff -up ./SCons/Config/gnu.debug ./SCons/Config/gnu ---- ./SCons/Config/gnu.debug 2009-02-13 12:41:42.000000000 +0100 -+++ ./SCons/Config/gnu 2009-02-13 12:42:37.000000000 +0100 -@@ -68,13 +68,16 @@ cross_env(stub_env) - - stub_env.Append(CPPPATH = ['#$BUILD_CONFIG']) - --if not defenv['DEBUG']: -- stub_env.Append(CCFLAGS = ['-Os']) # optimize for size -+if defenv['DEBUG_SYMBOLS']: -+ stub_env.Append(LINKFLAGS = '-g') # debugging -+ stub_env.Append(CCFLAGS = '-g') # debugging -+if not defenv['DEBUG'] and defenv['OPT']: -+ stub_env.Append(CCFLAGS = ['-O2']) # optimize - stub_env.Append(CCFLAGS = ['-Wall']) # all warnings - stub_env.Append(CCFLAGS = ['-xc']) # force compile as c - stub_env.Append(CCFLAGS = ['-fno-strict-aliasing']) # not safe for strict aliasing - --if not defenv['DEBUG'] and defenv['STRIP'] and defenv['STRIP_W32']: -+if not defenv['DEBUG'] and not defenv['DEBUG_SYMBOLS'] and defenv['STRIP'] and defenv['STRIP_W32']: - stub_env.Append(LINKFLAGS = ['-s']) # strip - stub_env.Append(LINKFLAGS = ['-mwindows']) # build windows executables - stub_env.Append(LINKFLAGS = ['$NODEFLIBS_FLAG']) # no standard libraries -@@ -88,15 +91,18 @@ makensis_env = defenv.Clone() - - makensis_env.Append(CPPPATH = ['#$BUILD_CONFIG']) - --if not defenv['DEBUG']: -- makensis_env.Append(CCFLAGS = ['-O2']) # optimize -+if defenv['DEBUG_SYMBOLS']: -+ makensis_env.Append(LINKFLAGS = '-g') # debugging -+ makensis_env.Append(CCFLAGS = '-g') # debugging -+if not defenv['DEBUG'] and defenv['OPT']: -+ makensis_env.Append(CCFLAGS = ['-O2']) # optimize - makensis_env.Append(CFLAGS = ['-Wall']) # all warnings - makensis_env.Append(CXXFLAGS = ['-Wno-non-virtual-dtor']) # ignore virtual dtor warnings - makensis_env.Append(CXXFLAGS = ['-Wall']) # all warnings - - conf = FlagsConfigure(makensis_env) - conf.CheckLinkFlag('$MAP_FLAG') # generate map file --if not defenv['DEBUG'] and defenv['STRIP'] and defenv['STRIP_CP']: -+if not defenv['DEBUG'] and not defenv['DEBUG_SYMBOLS'] and defenv['STRIP'] and defenv['STRIP_CP']: - TestStrip(conf) # strip - conf.Finish() - -@@ -105,12 +111,15 @@ conf.Finish() - plugin_env = defenv.Clone() - cross_env(plugin_env) - --if not defenv['DEBUG']: -- plugin_env.Append(CCFLAGS = ['-Os']) # optimize for size -+if defenv['DEBUG_SYMBOLS']: -+ plugin_env.Append(LINKFLAGS = '-g') # debugging -+ plugin_env.Append(CCFLAGS = '-g') # debugging -+if not defenv['DEBUG'] and defenv['OPT']: -+ plugin_env.Append(CCFLAGS = ['-O2']) # optimize - plugin_env.Append(CCFLAGS = ['-Wall']) # level 3 warnings - plugin_env.Append(CCFLAGS = ['-fno-strict-aliasing']) # not safe for strict aliasing - --if not defenv['DEBUG'] and defenv['STRIP'] and defenv['STRIP_W32']: -+if not defenv['DEBUG'] and not defenv['DEBUG_SYMBOLS'] and defenv['STRIP'] and defenv['STRIP_W32']: - plugin_env.Append(LINKFLAGS = ['-s']) # strip - plugin_env.Append(LINKFLAGS = ['-mwindows']) # build windows executables - plugin_env.Append(LINKFLAGS = ['$ALIGN_FLAG']) # 512 bytes align -@@ -122,7 +131,10 @@ cp_util_env = defenv.Clone() - - cp_util_env.Append(CPPPATH = ['#$BUILD_CONFIG']) - --if not defenv['DEBUG']: -+if defenv['DEBUG_SYMBOLS']: -+ cp_util_env.Append(LINKFLAGS = '-g') # debugging -+ cp_util_env.Append(CCFLAGS = '-g') # debugging -+if not defenv['DEBUG'] and defenv['OPT']: - cp_util_env.Append(CCFLAGS = ['-O2']) # optimize - cp_util_env.Append(CCFLAGS = ['-Wall']) # all warnings - cp_util_env.Append(CCFLAGS = ['-fno-strict-aliasing']) # not safe for strict aliasing -@@ -140,7 +152,7 @@ util_env.Append(LINKFLAGS = ['-mwindows' - util_env.Append(LINKFLAGS = ['$ALIGN_FLAG']) # 512 bytes align - - conf = FlagsConfigure(util_env) --if not defenv['DEBUG'] and defenv['STRIP'] and defenv['STRIP_W32']: -+if not defenv['DEBUG'] and not defenv['DEBUG_SYMBOLS'] and defenv['STRIP'] and defenv['STRIP_W32']: - util_env.Append(LINKFLAGS = ['-s']) # strip - conf.Finish() - -@@ -149,7 +161,7 @@ conf.Finish() - conf = FlagsConfigure(cp_util_env) - conf.CheckCompileFlag('-m32') - conf.CheckLinkFlag('-m32') --if not defenv['DEBUG'] and defenv['STRIP'] and defenv['STRIP_CP']: -+if not defenv['DEBUG'] and not defenv['DEBUG_SYMBOLS'] and defenv['STRIP'] and defenv['STRIP_CP']: - TestStrip(conf) # strip - conf.Finish() - -@@ -157,6 +169,9 @@ conf.Finish() - - test_env = defenv.Clone() - test_env.Append(CPPPATH = ['#$BUILD_CONFIG']) -+if defenv['DEBUG_SYMBOLS']: -+ test_env.Append(LINKFLAGS = '-g') # debugging -+ test_env.Append(CCFLAGS = '-g') # debugging - conf = FlagsConfigure(test_env) - conf.CheckCompileFlag('-m32') - conf.CheckLinkFlag('-m32') -diff -up ./SConstruct.debug ./SConstruct ---- ./SConstruct.debug 2009-02-04 15:05:48.000000000 +0100 -+++ ./SConstruct 2009-02-13 12:41:42.000000000 +0100 -@@ -157,6 +157,8 @@ opts.Add(('APPEND_CCFLAGS', 'Additional - opts.Add(('APPEND_LINKFLAGS', 'Additional linker flags')) - # build options - opts.Add(BoolVariable('DEBUG', 'Build executables with debugging information', 'no')) -+opts.Add(BoolOption('DEBUG_SYMBOLS', 'Build with debugging information, but none of the side effects of DEBUG', 'no')) -+opts.Add(BoolOption('OPT', 'Build with optimization', 'yes')) - opts.Add(PathVariable('CODESIGNER', 'A program used to sign executables', None)) - opts.Add(BoolVariable('STRIP', 'Strips executables of any unrequired data such as symbols', 'yes')) - opts.Add(BoolVariable('STRIP_CP', 'Strips cross-platform executables of any unrequired data such as symbols', 'yes')) diff --git a/nsiswrapper/COPYING b/nsiswrapper/COPYING deleted file mode 100644 index e77696a..0000000 --- a/nsiswrapper/COPYING +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) 19yy - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19yy name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/nsiswrapper/README b/nsiswrapper/README deleted file mode 100644 index c3d3e21..0000000 --- a/nsiswrapper/README +++ /dev/null @@ -1,52 +0,0 @@ -NSISWrapper is a helper program for making Windows installers, -particularly when you are cross-compiling from Unix. - -NSIS (a separate package) is a program for building Windows -installers. This wrapper simply makes it easier to generate the -installer script that NSIS needs. - -You can get NSIS itself from http://nsis.sourceforge.net/ but -generally speaking this wrapper is only useful when cross-compiling -(run from a Linux machine) in which case you should use the Fedora or -Debian version of NSIS from: - - Fedora: http://fedoraproject.org/wiki/MinGW - Debian: http://packages.debian.org/unstable/devel/nsis - ----------------------------------------------------------------------- - -NSISWrapper requires a reasonably recent version of Perl. You will -also need to install the MinGW cross-compiler binutils -(mingw32-binutils package). - ----------------------------------------------------------------------- - -For usage instructions, please refer to the manual page nsiswrapper(1). -If for some reason the manual page isn't installed then you can do -this instead: - - nsiswrapper --man - -For help with NSIS itself, please refer to the NSIS website. - -You can also get quick command line help by doing: - - nsiswrapper --help - ----------------------------------------------------------------------- - -Copyright (C) 2008 Red Hat Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at -your option) any later version. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. diff --git a/nsiswrapper/mingw32-nsiswrapper.spec b/nsiswrapper/mingw32-nsiswrapper.spec deleted file mode 100644 index 3d9d514..0000000 --- a/nsiswrapper/mingw32-nsiswrapper.spec +++ /dev/null @@ -1,72 +0,0 @@ -Name: mingw32-nsiswrapper -Version: 3 -Release: 3%{?dist} -Summary: Helper program for making NSIS Windows installers - -License: GPLv2+ -Group: Development/Libraries -URL: http://fedoraproject.org/wiki/MinGW -Source0: nsiswrapper.pl -Source1: README -Source2: COPYING -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) - -BuildArch: noarch - -BuildRequires: perl - -Requires: mingw32-nsis - - -%description -NSISWrapper is a helper program for making Windows installers, -particularly when you are cross-compiling from Unix. - -NSIS (a separate package) is a program for building Windows -installers. This wrapper simply makes it easier to generate the -installer script that NSIS needs. - - -%prep -# empty - - -%build -# empty - - -%install -rm -rf $RPM_BUILD_ROOT - -mkdir -p $RPM_BUILD_ROOT%{_bindir} -install -m 0755 %{SOURCE0} $RPM_BUILD_ROOT%{_bindir}/nsiswrapper - -# Install documentation (manually). -mkdir -p $RPM_BUILD_ROOT%{_docdir}/%{name}-%{version} -install -m 0644 %{SOURCE1} %{SOURCE2} \ - $RPM_BUILD_ROOT%{_docdir}/%{name}-%{version} - -# Build the manpage from the source. -mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1 -pod2man -c "NSIS" -r "%{name}-%{version}" %{SOURCE0} \ - > $RPM_BUILD_ROOT%{_mandir}/man1/nsiswrapper.1 - - -%clean -rm -rf $RPM_BUILD_ROOT - - -%files -%defattr(-,root,root) -%doc %{_docdir}/%{name}-%{version}/COPYING -%doc %{_docdir}/%{name}-%{version}/README -%{_bindir}/nsiswrapper -%{_mandir}/man1/nsiswrapper.1* - - -%changelog -* Fri Feb 20 2009 Richard W.M. Jones - 3-3 -- Rebuild for mingw32-gcc 4.4 - -* Thu Oct 16 2008 Richard W.M. Jones - 3-2 -- Initial RPM release. diff --git a/nsiswrapper/nsiswrapper.pl b/nsiswrapper/nsiswrapper.pl deleted file mode 100755 index af466a8..0000000 --- a/nsiswrapper/nsiswrapper.pl +++ /dev/null @@ -1,853 +0,0 @@ -#!/usr/bin/perl -w -# -# NSISWrapper - a helper program for making Windows installers. -# Copyright (C) 2008 Red Hat Inc. -# Written by Richard W.M. Jones , -# http://fedoraproject.org/wiki/MinGW -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -use strict; -use Getopt::Long; -use Pod::Usage; -use File::Temp qw/tempfile/; -#use Data::Dumper; - -=pod - -=head1 NAME - -nsiswrapper - Helper program for making NSIS Windows installers - -=head1 SYNOPSIS - - nsiswrapper [options] [roots...] - - nsiswrapper myprogram.exe anotherprog.exe docs/ > script.nsis - - nsiswrapper --run myprogram.exe anotherprog.exe docs/ - -=head1 DESCRIPTION - -nsiswrapper is a helper program for making it easier to create Windows -installers in a cross-compiler environment. It still requires NSIS (a -Windows installer generator) but cuts out the tedium of writing the -NSIS command script, and can even invoke NSIS automatically to -generate a final Windows executable. - -The general way to use it is to list out some files that you want -packaged. For example: - - nsiswrapper myprogram.exe - -This will search for C and any libraries (C<*.dll>) -that it depends upon, and then it will print out an NSIS script. - -If you want to have it run C as well (to automatically -create a Windows installer) then do: - - nsiswrapper --run myprogram.exe - -which will generate C output file that contains -C plus any dependencies. - -You can list other files and directories that you want to have -contained in your installer. For example: - - nsiswrapper myprogram.exe anotherprog.exe docs/*.html - -There are many other command line options which control aspects of the -NSIS command script (and hence, the final installer), such as: - -=over 4 - -=item * - -The name of the final installer. - -=item * - -Desktop shortcuts and menu items. - -=item * - -License files. - -=back - -It's a good idea to examine the NSIS command script, to check that -nsiswrapper is including all the right dependencies. - -=head1 ROOTS (FILES AND DIRECTORIES) - -Each parameter should refer to a file or directory which is to be -included in the installer. - -These are known as "roots" because we also automatically add any -dependencies to the list of files. Thus if a Windows executable -requires any DLLs, those are added automatically. DLLs are searched -for on the current C<$PATH> (environment variable). - -We choose the install location by removing any common prefix from the -names of roots, which generally ensures that the original directory -structure is preserved. Thus for example if the original roots (and -any dependencies) are: - - /usr/i686-pc-mingw32/sys-root/mingw/bin/program.exe - /usr/i686-pc-mingw32/sys-root/mingw/bin/library.dll - /usr/i686-pc-mingw32/sys-root/mingw/etc/config - -then the install directory will look like this: - - $INSTDIR/bin/program.exe - $INSTDIR/bin/library.dll - $INSTDIR/etc/config - -(C<$INSTDIR> is the installation directory chosen by the user at -install time). - -You can also specify the install location (relative to C<$INSTDIR>) by -adding roots of the form: - - source=destination - -for example: - - /usr/i686-pc-mingw32/sys-root/mingw/bin/program.exe=program.exe - /usr/i686-pc-mingw32/sys-root/mingw/bin/library.dll=library.dll - /usr/i686-pc-mingw32/sys-root/mingw/etc/config=conf/config - -which results in: - - $INSTDIR/program.exe - $INSTDIR/library.dll - $INSTDIR/conf/config - -=head1 OPTIONS - -=over 4 - -=item B<--help> - -Print brief help message and exit. - -=item B<--man> - -Print the full manual page for the command and exit. - -=item B<--verbose> - -Print verbose messages while running. If this is not given then we -try to operate quietly. - -=item B<--run> - -Normally this program just prints out the NSIS installer command -script. However if you supply this option, then we run C -and attempt to generate an actual Windows installer. - -=item B<--with-gtk> - -GTK programs should normally supply this option. It ensures that the -correct files are copied and/or created by the installer for GTK -programs to work. - -=item B<--name "Name"> - -Set the long name of the installer. - -If not set, the script tries to invent a suitable name based on the -first root file given on the command line. - -See also B<--outfile>. - -=item B<--outfile myinstaller.exe> - -Set the output filename for the installer. - -If not set, this defaults to C. - -This is the same as the C option to NSIS. - -=item B<--installdir 'C:\foo'> - -Set the default Windows installation directory. If not set, this -program will choose a suitable default based on the name. - -In any case, the end user can override this when they run the -installer. - -Note that since this string will contain backslashes, you should -single-quote it to protect it from the shell. - -This is the same as the C option to NSIS. - -=item B<--installdirregkey 'HKLM SOFTWARE\FOO'> - -Set the name of the registry key used to save the installation -directory. This has two purposes: Firstly it is used to automagically -remember the installation directory between installs. Secondly your -program can use this as one method to find its own installation -directory (there are other ways to do this). - -The default is C where C is derived from the -name of the installer. - -Note that since this string will contain backslashes and spaces, you -should single-quote it to protect it from the shell. - -This is the same as the C option to NSIS. - -=back - -=cut - -my $objdump; -my %files; - -my $help = ''; -my $man = ''; -my $verbose = ''; -my $run = ''; -my $with_gtk = ''; -my $name = ''; -my $outfile = 'installer.exe'; -my $installdir = ''; -my $installdirregkey = ''; - -# XXX Should make these configurable. -my $mingw32_prefix = '/usr/i686-pc-mingw32/sys-root/mingw'; -my $mingw32_bindir = $mingw32_prefix . '/bin'; -my $mingw32_libdir = $mingw32_prefix . '/lib'; -my $mingw32_sysconfdir = $mingw32_prefix . '/etc'; - -sub get_options -{ - my $result = GetOptions ( - "help|?" => \$help, - "man" => \$man, - "verbose" => \$verbose, - "run" => \$run, - "with-gtk" => \$with_gtk, - "name=s" => \$name, - "outfile=s" => \$outfile, - "installdir=s" => \$installdir, - "installdirregkey=s" => \$installdirregkey, - ); - die "nsiswrapper: use --help for information about command line options\n" - unless $result; - - pod2usage(1) if $help; - pod2usage(-exitstatus => 0, -verbose => 2) if $man; - - # Add the roots to the list of files. - die "nsiswrapper: no roots specified: use --help for more help\n" - if @ARGV == 0; - foreach my $file (@ARGV) { - my ($dir, $exec) = (0, 0); - - # Is it source=destination? - my ($source, $dest); - if ($file =~ /^(.*)=(.*)$/) { - $source = $1; - $dest = $2; - } else { - $source = $file; - } - - die "$source: not a file or directory\n" - unless -f $source || -d $source; - - $exec = 1 if $source =~ m/\.exe$/i; - $dir = 1 if -d $source; - - $files{$source} = { - name => $source, - root => 1, - dir => $dir, - exec => $exec, - }; - - # Deal with explicit destination. - if (defined $dest) { - my ($install_dir, $install_name); - - if ($dest =~ m{(.*)/(.*)}) { - $install_dir = $1; - $install_name = $2; - } else { - $install_dir = "."; - $install_name = $dest; - } - - # Convert / in install_dir into backslashes. - $install_dir =~ s{/}{\\}g; - - $files{$source}->{install_dir} = $install_dir; - $files{$source}->{install_name} = $install_name; - } - } - - # Name not set? - if (!$name) { - # Massage the first root into a suitable package name. - $_ = $ARGV[0]; - s{.*/}{}; - s{=.*$}{}; - s{\.\w\w\w\w?$}{}; - $_ = ucfirst; - $name = $_; - } - - # InstallDir not set? - if (!$installdir) { - $_ = $name; - s/\W/-/g; - $installdir = "c:\\$_" - } - - # InstallDirRegKey not set? - if (!$installdirregkey) { - $_ = $name; - s/\W/-/g; - $installdirregkey = "HKLM SOFTWARE\\$_" - } -} - -# Check prerequisites. - -sub check_prereqs -{ - my @paths = split (/:/, $ENV{PATH}); - - if (! $objdump) { - $objdump = check_path ("i686-pc-mingw32-objdump", @paths); - if (! $objdump || ! -x $objdump) { - die "i686-pc-mingw32-objdump: program not found on \$PATH\n" - } - } -} - -# Check for the existance of a file at the given paths (not -# necessarily executable). Returns the pathname of the file or -# undefined if not found. - -sub check_path -{ - local $_ = shift; - my @paths = @_; - - my $found; - foreach my $dir (@paths) { - my $file = $dir . "/" . $_; - if (-f $file) { - $found = $file; - last; - } - } - $found -} - -# Print configuration. - -sub print_config -{ - print "Configuration:\n"; - print "\t\$PATH = $ENV{PATH}\n"; - print "\t\$objdump = $objdump\n"; - print "\t\$verbose = $verbose\n"; - print "\t\$name = \"$name\"\n"; - print "\t\$outfile = \"$outfile\"\n"; - print "\t\$installdir = \"$installdir\"\n"; - print "\t\$installdirregkey = \"$installdirregkey\"\n"; - my @roots = keys %files; - print "\t\@roots = (", join (", ", @roots), ")\n"; - print "End of configuration.\n"; -} - -# Starting at the roots, get the dependencies. - -my $missing_deps = 0; - -sub do_dependencies -{ - my $deps_added = 1; - - while ($deps_added > 0) { - $deps_added = 0; - - foreach (keys %files) { - my @deps = get_deps_for_file ($_); - - # Add the deps as separate files. - foreach (@deps) { - $deps_added += add_file_unless_exists ( - $_, - root => 0, - dir => 0, - exec => 0 - ); - } - } - } - - die "please correct missing dependencies shown above\n" - if $missing_deps > 0; -} - -sub add_file_unless_exists -{ - my $name = shift; - my %details = @_; - - unless (exists $files{$name}) { - die "$name: not a file or directory\n" unless -f $name || -d $name; - - $details{name} = $name; - $files{$name} = \%details; - - return 1; - } else { - return 0; - } -} - -my $path_warning = 0; - -sub get_deps_for_file -{ - my $file = shift; - my @paths = split (/:/, $ENV{PATH}); - - # If we already fetched the dependencies for this file, just - # return that list now. - if (exists $files{$file}->{deps}) { - return @{$files{$file}->{deps}} - } - - my @deps = (); - - # We only know how to do this for *.exe and *.dll files. - if (m/\.exe$/i || m/\.dll$/i) { - my $cmd = "$objdump -p '$file' | - grep 'DLL Name:' | - grep -Eo '[-._[:alnum:]]+\.dll' | - sort -u"; # XXX quoting - open DEPS, "$cmd |" or die "$cmd: $!"; - foreach () { - chomp; $_ = lc; - - # Ignore Windows system DLL deps. - next if is_windows_system_dll ($_); - - # Does the file exist on the path? - my $found = check_path ($_, @paths); - if ($found) { - push @deps, $found; - } else { - warn "MISSING DEPENDENCY: $_ (for $file)\n"; - $missing_deps++; - unless ($path_warning) { - warn "You may need to add the directory containing this file to your \$PATH\n"; - $path_warning = 1; - } - } - } - close DEPS; - - if ($verbose) { - if (@deps > 0) { - print "dependencies found for binary $file:\n\t", - join ("\n\t", @deps), "\n"; - } else { - print "no dependencies found for $file\n" - } - } - - } - - # Cache the list of dependencies so we can just return it - # immediately next time. - $files{$file}->{deps} = \@deps; - return @deps; -} - -sub is_windows_system_dll -{ - local $_ = shift; - - $_ eq 'gdi32.dll' || - $_ eq 'kernel32.dll' || - $_ eq 'ole32.dll' || - $_ eq 'mscoree.dll' || - $_ eq 'msvcrt.dll' || - $_ eq 'user32.dll' -} - -# Add Gtk dependencies, if --with-gtk. - -sub do_gtk -{ - add_file_unless_exists ( - "$mingw32_libdir/gtk-2.0", - root => 0, - dir => 1, - exec => 0, - install_dir => "lib", - install_name => "gtk-2.0" - ); - - add_file_unless_exists ( - "$mingw32_libdir/pango", - root => 0, - dir => 1, - exec => 0, - install_dir => "lib", - install_name => "pango" - ); - - add_file_unless_exists ( - "$mingw32_sysconfdir/fonts", - root => 0, - dir => 1, - exec => 0, - install_dir => "etc", - install_name => "fonts" - ); - - add_file_unless_exists ( - "$mingw32_sysconfdir/gtk-2.0", - root => 0, - dir => 1, - exec => 0, - install_dir => "etc", - install_name => "gtk-2.0" - ); - - add_file_unless_exists ( - "$mingw32_sysconfdir/pango", - root => 0, - dir => 1, - only_mkdir => 1, - exec => 0, - install_dir => "etc", - install_name => "pango" - ); - - # We need to run pango-querymodules after installation to - # rebuild etc\pango\pango.modules. - add_file_unless_exists ( - "$mingw32_bindir/pango-querymodules.exe", - root => 0, - dir => 0, - exec => 0 - ); -} - -# Decide how we will name the output files. This removes the -# common prefix from filenames, if it can determine one. - -sub install_names -{ - my @names = keys %files; - - # Don't care about files that already have an install - # directory/name defined, ie. they were specified as source=dest - # on the command line. - @names = grep { ! exists $files{$_}->{install_name} } @names; - - # Determine if all the names share a common prefix. - my @namelens = map { length } @names; - my $shortest = min (@namelens); - - my $prefixlen; - for ($prefixlen = $shortest; $prefixlen >= 0; --$prefixlen) { - my @ns = map { substr $_, 0, $prefixlen } @names; - last if same (@ns); - } - - if ($verbose) { print "prefix length = $prefixlen\n" } - - # Remove the prefix from each name and save the install directory - # and install filename separately. - foreach my $name (@names) { - my $install_as = substr $name, $prefixlen; - - my ($install_dir, $install_name); - - if ($install_as =~ m{(.*)/(.*)}) { - $install_dir = $1; - $install_name = $2; - } else { - $install_dir = "."; - $install_name = $install_as; - } - - # Convert / in install_dir into backslashes. - $install_dir =~ s{/}{\\}g; - - $files{$name}->{install_dir} = $install_dir; - $files{$name}->{install_name} = $install_name; - } -} - -sub max -{ - my $max = $_[0]; - for (@_[1..$#_]) { - $max = $_ if $_ > $max; - } - $max -} - -sub min -{ - my $min = $_[0]; - for (@_[1..$#_]) { - $min = $_ if $_ < $min; - } - $min -} - -sub same -{ - my $s = $_[0]; - for (@_[1..$#_]) { - return 0 if $_ ne $s; - } - 1; -} - -# Print the list of files. - -sub print_files -{ - print "Files:\n"; - foreach (sort keys %files) { - print "\t$_"; - if ($files{$_}->{root}) { - print " [root]"; - } - if ($files{$_}->{dir}) { - print " [dir]"; - } - print STDOUT ("\n\t => ", - $files{$_}->{install_dir}, " \\ ", $files{$_}->{install_name}, - "\n"); - } - print "End of files.\n"; -} - -# Write the NSIS script. - -sub write_script -{ - my $io = shift; - - print $io <{install_dir} ne $olddir) { - # Moved into a new install directory. - my $dir = $files{$_}->{install_dir}; - print $io "\n SetOutPath \"\$INSTDIR\\$dir\"\n"; - $olddir = $dir; - } - - # If it's a directory, we copy it recursively, otherwise - # just copy the single file. - if ($files{$_}->{dir}) { - if ($files{$_}->{only_mkdir}) { - # This is a hack to allow us to create empty directories. - my $install_dir = $files{$_}->{install_dir}; - my $install_name = $files{$_}->{install_name}; - print $io " CreateDirectory \"\$INSTDIR\\$install_dir\\$install_name\"\n"; - } else { - print $io " File /r \"$_\"\n"; - } - } else { - print $io " File \"$_\"\n"; - } - } - - # GTK? - if ($with_gtk) { - my $install_dir = $files{"$mingw32_bindir/pango-querymodules.exe"}->{install_dir}; - my $install_name = $files{"$mingw32_bindir/pango-querymodules.exe"}->{install_name}; - - # This particular piece of Windows stupidity is documented here: - # http://forums.winamp.com/showthread.php?postid=438771#post438771 - # http://forums.winamp.com/printthread.php?s=53c76b4ae4221ff1d9dc361fc5bf7ea2&threadid=231797 - print $io "\n"; - print $io " ReadEnvStr \$0 COMSPEC\n"; - print $io " SetOutPath \"\$INSTDIR\"\n"; - print $io " nsExec::ExecToLog '\$0 /C $install_dir\\$install_name > etc\\pango\\pango.modules'\n" - } - - print $io <{exec}) { - my $install_dir = $files{$_}->{install_dir}; - my $install_name = $files{$_}->{install_name}; - print $io " CreateShortCut \"\$SMPROGRAMS\\$name\\$install_name.lnk\" \"\$INSTDIR\\$install_dir\\$install_name\" \"\" \"\$INSTDIR\\$install_dir\\$install_name\" 0\n"; - } - } - - print $io <{exec}) { - my $install_dir = $files{$_}->{install_dir}; - my $install_name = $files{$_}->{install_name}; - print $io " CreateShortCut \"\$DESKTOP\\$install_name.lnk\" \"\$INSTDIR\\$install_dir\\$install_name\" \"\" \"\$INSTDIR\\$install_dir\\$install_name\" 0\n"; - } - } - - print $io <{exec}) { - my $install_name = $files{$_}->{install_name}; - print $io " Delete /rebootok \"\$DESKTOP\\$install_name.lnk\"\n"; - print $io " Delete /rebootok \"\$SMPROGRAMS\\$name\\$install_name.lnk\"\n"; - } - } - print $io " Delete /rebootok \"\$SMPROGRAMS\\$name\\Uninstall $name.lnk\"\n"; - print $io " RMDir \"\$SMPROGRAMS\\$name\"\n\n"; - - # Remove remaining files. - $olddir = ''; - foreach (reverse sort keys %files) { - if (!$olddir || $files{$_}->{install_dir} ne $olddir) { - # Moved into a new install directory, so delete the previous one. - print $io " RMDir \"\$INSTDIR\\$olddir\"\n\n" - if $olddir; - $olddir = $files{$_}->{install_dir}; - } - - # If it's a directory, we delete it recursively, otherwise - # just delete the single file. - my $install_dir = $files{$_}->{install_dir}; - my $install_name = $files{$_}->{install_name}; - if ($files{$_}->{dir}) { - print $io " RMDir /r \"\$INSTDIR\\$install_dir\\$install_name\"\n\n"; - $olddir = ''; # Don't double-delete directory. - } else { - print $io " Delete /rebootok \"\$INSTDIR\\$install_dir\\$install_name\"\n"; - } - } - - print $io " RMDir \"\$INSTDIR\\$olddir\"\n" if $olddir; - - print $io < 1); - write_script ($io); - close $io; - run_makensis ($filename); - } else { - write_script (\*STDOUT); - } -} - -main ()