# # This oeclass takes care about some of the itchy details of installing parts # of Opie applications. Depending on quicklaunch or not, plugin or not, the # TARGET is either a shared object, a shared object with a link to quicklauncher, # or a usual binary. # # You have to provide two things: 1.) A proper SECTION field, and 2.) a proper APPNAME # Then opie.oeclass will: # * create the directory for the binary and install the binary file(s) # * for applications: create the directory for the .desktop and install the .desktop file # * for quicklauncher applications: create the startup symlink to the quicklauncher # You can override the automatic detection of APPTYPE, valid values are 'quicklaunch', 'binary', 'plugin' # You can override the default location of APPDESKTOP (<workdir>/apps/<section>/) # inherit palmtop DEPENDS_prepend = "${@["libopie2 ", ""][(bb.data.getVar('PN', d, 1) == 'libopie2')]}" # to be consistent, put all targets into workdir EXTRA_QMAKEVARS_POST_append = " DESTDIR=${S}" # Opie standard TAG value TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '_')}" # plan for later: # add common scopes for opie applications, see qmake-native/common.pro # qmake should care about all the details then. qmake can do that, i know it :) # python opie_do_opie_install() { import os, shutil section = bb.data.getVar( "SECTION", d ).split( '/' )[1] or "Applications" section = section.title() if section in ( "Base", "Libs" ): bb.note( "Section = Base or Libs. Target won't be installed automatically." ) return # SECTION : BINDIR DESKTOPDIR dirmap = { "Applets" : ( "/plugins/applets", None ), "Applications" : ( "<BINDIR>", "/apps/Applications" ), "Multimedia" : ( "<BINDIR>", "/apps/Applications" ), "Games" : ( "<BINDIR>", "/apps/Games" ), "Settings" : ( "<BINDIR>", "/apps/Settings" ), "Pim" : ( "<BINDIR>", "/apps/1Pim" ), "Examples" : ( "<BINDIR>", "/apps/Examples" ), "Shell" : ( "/bin", "/apps/Opie-SH" ), "Codecs" : ( "/plugins/codecs", None ), "Decorations" : ( "/plugins/decorations", None ), "Inputmethods" : ( "/plugins/inputmethods", None ), "Fontfactories" : ( "/plugins/fontfactories", None ), "Security" : ( "/plugins/security", None ), "Styles" : ( "/plugins/styles", None ), "Today" : ( "/plugins/today", None ), "Datebook" : ( "/plugins/holidays", None ), "Networksettings" : ( "/plugins/networksettings", None ) } if section not in dirmap: raise ValueError, "Unknown section '%s'. Valid sections are: %s" % ( section, dirmap.keys() ) bindir, desktopdir = dirmap[section] APPNAME = bb.data.getVar( "APPNAME", d, True ) or bb.data.getVar( "PN", d, True ) APPTYPE = bb.data.getVar( "APPTYPE", d, True ) if not APPTYPE: if bindir == "<BINDIR>": APPTYPE = "quicklaunch" else: APPTYPE = "plugin" appmap = { "binary":"/bin", "quicklaunch":"/plugins/application" } if bindir == "<BINDIR>": bindir = appmap[APPTYPE] bb.note( "Section='%s', bindir='%s', desktopdir='%s', name='%s', type='%s'" % ( section, bindir, desktopdir, APPNAME, APPTYPE ) ) S = bb.data.getVar( "S", d, 1 ) D = "%s/image" % bb.data.getVar( "WORKDIR", d, True ) WORKDIR = bb.data.getVar( "WORKDIR", d, True ) palmtopdir = bb.data.getVar( "palmtopdir", d ) APPDESKTOP = bb.data.getVar( "APPDESKTOP", d, True ) or "%s/%s" % ( WORKDIR, desktopdir ) if desktopdir is not None: os.system( "install -d %s%s%s/" % ( D, palmtopdir, desktopdir ) ) os.system( "install -m 0644 %s/%s.desktop %s%s%s/" % ( APPDESKTOP, APPNAME, D, palmtopdir, desktopdir ) ) os.system( "install -d %s%s%s/" % ( D, palmtopdir, bindir ) ) if APPTYPE == "binary": os.system( "install -m 0755 %s/%s %s%s%s/" % ( S, APPNAME, D, palmtopdir, bindir ) ) elif APPTYPE == "quicklaunch": os.system( "install -m 0755 %s/lib%s.so %s%s%s/" % ( S, APPNAME, D, palmtopdir, bindir ) ) os.system( "install -d %s%s/bin/" % ( D, palmtopdir ) ) os.system( "ln -sf %s/bin/quicklauncher %s%s/bin/%s" % ( palmtopdir, D, palmtopdir, APPNAME ) ) elif APPTYPE == "plugin": os.system( "install -m 0755 %s/lib%s.so %s%s%s/" % ( S, APPNAME, D, palmtopdir, bindir ) ) } EXPORT_FUNCTIONS do_opie_install addtask opie_install after do_compile before do_populate_staging