[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [emerge] portage/package/test-package: commit my test package
From: Patrick Spendrin <ps_ml () gmx ! de>
Date: 2015-09-24 14:37:05
Message-ID: E1Zf7dx-0002kw-5C () scm ! kde ! org
[Download RAW message or body]
Git commit 6a9f1ea629126d83471fd682a9b9391ee3ce94cb by Patrick Spendrin.
Committed on 24/09/2015 at 14:36.
Pushed by sengels into branch 'master'.
commit my test package
A +35 -0 portage/package/test-package/main.wxs.template
A +- -- portage/package/test-package/test-package.ico
A +199 -0 portage/package/test-package/test-package.py
http://commits.kde.org/emerge/6a9f1ea629126d83471fd682a9b9391ee3ce94cb
diff --git a/portage/package/test-package/main.wxs.template \
b/portage/package/test-package/main.wxs.template new file mode 100644
index 0000000..9529a8d
--- /dev/null
+++ b/portage/package/test-package/main.wxs.template
@@ -0,0 +1,35 @@
+<?xml version='1.0' encoding='windows-1252'?>
+<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
+ <Product Name='frameworks SDK' Id='bf3b68f5-6ef2-498d-ba65-4ef819d5808f' \
UpgradeCode='b89e7ce6-80d5-4f09-91c7-afa6925236e0' + Language='1033' \
Codepage='1252' Version='1.0.0' Manufacturer='The KDE Windows Team'> +
+ <Package Id='*' Keywords='Installer'
+ Description="frameworks SDK Installer"
+ Comments='frameworks SDK installer' Manufacturer='The KDE Windows Team'
+ InstallerVersion='100' Languages='1033' Compressed='yes' \
SummaryCodepage='1252' /> +
+ <Media Id='1' Cabinet='Sample.cab' EmbedCab='yes' />
+
+ <Directory Id='TARGETDIR' Name='SourceDir'>
+ <Directory Id='INSTALLDIR' Name='KF5'>
+ </Directory>
+ </Directory>
+
+ <Feature Id='Complete' Title='KDE Frameworks SDK' Description='The complete \
package.' + Display='expand' Level='1' ConfigurableDirectory='INSTALLDIR'>
+ <Feature Id='Dependencies' Title='the 3rdparty dependencies' Description='the \
3rdparty dependencies' Display='hidden' Level='1'> +${dependenciesCode} \
</Feature> + <Feature Id='Qt5Frameworks' Title='Qt5 Frameworks' Description='The \
KDE build of Qt5' Level='1'> +${qtFrameworksCode} </Feature>
+ <Feature Id='KF5Frameworks' Title='KF5 Frameworks' Description='The KDE \
Frameworks' Level='1'> +${kfFrameworksCode} </Feature>
+ </Feature>
+
+ <UIRef Id="WixUI_Mondo" />
+ <UIRef Id="WixUI_ErrorProgressText" />
+${iconCode}
+
+ <Icon Id="test_package.ico" SourceFile="test-package.ico" />
+ <Property Id="ARPPRODUCTICON" Value="test_package.ico" />
+ </Product>
+</Wix>
diff --git a/portage/package/test-package/test-package.ico \
b/portage/package/test-package/test-package.ico new file mode 100644
index 0000000..7a5f6a1
Binary files /dev/null and b/portage/package/test-package/test-package.ico differ
diff --git a/portage/package/test-package/test-package.py \
b/portage/package/test-package/test-package.py new file mode 100644
index 0000000..a5ebf35
--- /dev/null
+++ b/portage/package/test-package/test-package.py
@@ -0,0 +1,199 @@
+import info
+import portage
+from xml.dom.minidom import Document
+import hashlib
+from string import Template
+from io import StringIO
+import uuid
+import re
+
+class subinfo( info.infoclass ):
+ def setTargets( self ):
+ for ver in ['0.1']:
+ self.svnTargets[ ver ] = ''
+
+ self.defaultTarget = '0.1'
+
+
+ def setDependencies( self ):
+ #self.buildDependencies['dev-util/frameworks-sdk'] = 'default'
+ #self.buildDependencies['dev-util/emerge'] = 'default'
+ #self.dependencies['frameworks/attica'] = 'default'
+ #self.dependencies['frameworks/kcoreaddons'] = 'default'
+ self.dependencies['frameworks/tier1'] = 'default'
+ self.dependencies['frameworks/tier2'] = 'default'
+ #self.dependencies['frameworks/tier3'] = 'default'
+ #self.dependencies['frameworks/tier4'] = 'default'
+
+
+from Package.VirtualPackageBase import *
+from Packager.CollectionPackagerBase import *
+from Packager.MSIFragmentPackager import getUniqueIdString, getUniqueDirectoryId
+
+class Package( VirtualPackageBase, CollectionPackagerBase ):
+ def __init__( self, **args ):
+ VirtualPackageBase.__init__( self )
+ CollectionPackagerBase.__init__( self )
+ self.dirs = dict()
+
+ def __getPackages( self ):
+ """return package instances for all dependencies"""
+ packages = []
+ directDependencies = portage.getDependencies( self.category, self.package )
+
+ depList = []
+ for ( category, package, _, _ ) in directDependencies:
+ # unlike in CollectionPackagerBase, we want all dependencies here
+ portage.solveDependencies( category, package, depList = depList )
+ depList.reverse()
+ for x in depList:
+ # Ignore dev-utils that are wrongly set as hard dependencies
+ if x.category == "dev-util" or x.package in ['wget', 'patch', 'sed'] or \
portage.PortageInstance.isVirtualPackage( x.category, x.package ): + \
continue + _package = portage.getPackageInstance( x.category, x.package )
+
+ packages.append( _package )
+ return packages
+
+
+ def getFeatureXML( self, wxs, package, description, hidden=False ):
+ componentRoot = wxs.createElement( "Feature" )
+
+ componentRoot.setAttribute( "Id", "%sFeature" % package.replace( '-', '_' ) \
) + componentRoot.setAttribute( "Title", "%s" % package )
+ if description: componentRoot.setAttribute( "Description", description )
+ componentRoot.setAttribute( "Level", "1" )
+ if hidden: display = "hidden"
+ else: display = "collapse"
+ componentRoot.setAttribute( "Display", display )
+
+ componentGroupRef = wxs.createElement( "ComponentGroupRef" )
+ componentGroupRef.setAttribute( "Id", "%sComponentGroup" % package.replace( \
'-', '_' ) ) + componentRoot.appendChild( componentGroupRef )
+
+ componentlistString = StringIO()
+ componentRoot.writexml( componentlistString, " " * , " ", "\n" )
+ s = componentlistString.getvalue()
+ componentlistString.close()
+
+ return s
+
+ def generateDirectoryFragments( self ):
+ wxs = Document()
+ wix = wxs.createElement( "Wix" )
+ wix.setAttribute( "xmlns", "http://schemas.microsoft.com/wix/2006/wi" )
+ wxs.appendChild( wix )
+ for _dirref in sorted( self.dirs.keys() ):
+ fragment = wxs.createElement( "Fragment" )
+ wix.appendChild( fragment )
+ directoryRef = wxs.createElement( "DirectoryRef" )
+ _dirrefId = getUniqueDirectoryId( _dirref )
+ if _dirref == ".":
+ _dirrefId = "INSTALLDIR"
+ directoryRef.setAttribute( "Id", _dirrefId )
+ fragment.appendChild( directoryRef )
+ for _dir in self.dirs[ _dirref ]:
+ dirElement = wxs.createElement( "Directory" )
+ if not _dirref == ".":
+ _id = getUniqueDirectoryId( os.path.join( _dirref, _dir ) )
+ else:
+ _id = getUniqueDirectoryId( _dir )
+ dirElement.setAttribute( "Id", _id )
+ dirElement.setAttribute( "Name", _dir )
+ directoryRef.appendChild( dirElement )
+
+ outfile = os.path.join( self.imageDir(), "_directories.wxs" )
+ out = open( outfile, 'w' )
+ wxs.writexml( out, "", " ", "\n", encoding = "utf-8" )
+ out.close()
+
+ objfile = outfile.replace( "wxs", "wix" ) + "obj"
+ utils.system( "candle -o %s %s" % ( objfile, outfile ) )
+ return objfile
+
+ def createPackage( self ):
+ # handle direct dependencies special
+ deps = portage.getDependencies( self.category, self.package )
+ frameworks = [ package for _, package, _, _ in deps ]
+
+ qtFrameworks = []
+ basePackages = []
+ objectFiles = []
+
+ dependenciesCode = ""
+ qtFrameworksCode = ""
+ kfFrameworksCode = ""
+
+ # run heat on all image directories
+ _packages = self.__getPackages()
+
+ binwxs = Document()
+ qt5wxs = Document()
+ kf5wxs = Document()
+ for package in _packages:
+ if not package.package in frameworks and package.category != "libs":
+ basePackages.append( package.package )
+ dependenciesCode += self.getFeatureXML( binwxs, package.package, \
package.subinfo.shortDescription, True ) + elif package.category == \
"libs": + qtFrameworks.append( package.package )
+ qtFrameworksCode += self.getFeatureXML( qt5wxs, package.package, \
package.subinfo.shortDescription ) + else:
+ # assume this is a kf5 framework
+ kfFrameworksCode += self.getFeatureXML( kf5wxs, package.package, \
package.subinfo.shortDescription ) +
+ package.changePackager( "MSIFragmentPackager" )
+ package.outDestination = self.imageDir()
+ package.createPackage()
+ for x in package.objectFiles:
+ objectFiles.append( x )
+
+ imgDir = package.imageDir()
+ for root, dirs, _ in os.walk( imgDir ):
+ relRoot = os.path.relpath( root, imgDir )
+ if len( dirs ) > 0:
+ if relRoot in self.dirs:
+ for x in dirs:
+ if x not in self.dirs[ relRoot ]: self.dirs[ relRoot \
].append( x ) + else:
+ self.dirs[ relRoot ] = dirs
+
+ print( '=' * 20 )
+ for p in basePackages: print( p )
+ print( '-' * 20 )
+ for p in qtFrameworks: print( p )
+ print( '-' * 20 )
+ for p in frameworks: print( p )
+ print( '=' * 20 )
+
+ # generate base file
+ templateFile = open( os.path.join( self.packageDir(), "main.wxs.template" ), \
'r' ) + scriptTemplate = Template( templateFile.read() )
+
+ iconCode = """<Icon Id="Foobar10.exe" SourceFile="FoobarAppl10.exe" />"""
+ iconCode = ""
+
+ substitutedScript = scriptTemplate.safe_substitute( { 'dependenciesCode': \
dependenciesCode, 'qtFrameworksCode': qtFrameworksCode, 'kfFrameworksCode': \
kfFrameworksCode, 'iconCode': iconCode } ) +
+ outfile = os.path.join( self.imageDir(), "_main.wxs" )
+ out = open( outfile, 'w' )
+ out.write( substitutedScript )
+ out.close()
+ objfile = outfile.replace( "wxs", "wix" ) + "obj"
+ utils.system( "candle -o %s %s" % ( objfile, outfile ) )
+ objectFiles.append( objfile )
+
+ objfile = self.generateDirectoryFragments()
+ objectFiles.append( objfile )
+ #objectFiles.append( os.path.join( self.imageDir(), "icon.wixobj" ) )
+
+ outputName = os.path.join( self.packageDestinationDir(), "test-package.msi" \
) + #print( objectFiles )
+ linkCmd = "light -ext WixUIExtension -o %s %s" % ( outputName, " ".join( \
objectFiles ) ) + #print( linkCmd )
+ utils.system( linkCmd )
+ return True
+
+ def package( self ):
+ self.createPackage()
+ return True
+
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic