1
0
mirror of https://github.com/roytam1/UXP.git synced 2026-05-26 13:58:49 +00:00

Import XULRunner and make it produce the generic stub

This commit is contained in:
NTD
2018-04-20 20:11:26 -04:00
committed by Roy Tam
parent 1f12910aa2
commit d3be0506a0
73 changed files with 2418 additions and 10 deletions
+13
View File
@@ -0,0 +1,13 @@
XULRunner is a package which can be used to run applications written in HTML
or XUL. It can also be used to embed the gecko rendering engine into
binary applications.
XULRunner is not a product; it is a tool which can be used to create products.
It is a byproduct of Firefox development and the Mozilla community does not
have a strong commitment to support XULRunner development apart from Firefox
development.
For more information about using XULRunner or how to use this binary package,
see the Mozilla Developer Center article:
https://developer.mozilla.org/en/XULRunner
+13
View File
@@ -0,0 +1,13 @@
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
include('/toolkit/toolkit.mozbuild')
if CONFIG['MOZ_EXTENSIONS']:
DIRS += ['/extensions']
DIRS += [
'/application/xulrunner',
]
+75
View File
@@ -0,0 +1,75 @@
# vim:set ts=8 sw=8 sts=8 et:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
GARBAGE += $(addprefix $(DIST)/bin/defaults/pref/,xulrunner.js)
ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
TK_LIBS := -framework Cocoa $(TK_LIBS)
endif
ifndef MOZ_WINCONSOLE
ifdef MOZ_DEBUG
MOZ_WINCONSOLE = 1
else
MOZ_WINCONSOLE = 0
endif
endif
# This switches $(INSTALL) to copy mode, like $(SYSINSTALL), so things that
# shouldn't get 755 perms need $(IFLAGS1) for either way of calling nsinstall.
NSDISTMODE = copy
include $(topsrcdir)/config/config.mk
include $(topsrcdir)/config/rules.mk
DEFINES += -DXULRUNNER_ICO='"$(DIST)/branding/xulrunner.ico"' -DDOCUMENT_ICO='"$(DIST)/branding/document.ico"'
ifdef MOZ_WIDGET_GTK
libs::
$(INSTALL) $(IFLAGS1) $(DIST)/branding/default16.png $(DIST)/bin/chrome/icons/default
$(INSTALL) $(IFLAGS1) $(DIST)/branding/default32.png $(DIST)/bin/chrome/icons/default
$(INSTALL) $(IFLAGS1) $(DIST)/branding/default48.png $(DIST)/bin/chrome/icons/default
endif
# XXX applications would need to supply this file
#export:: brand.dtd.in
# $(call py_action,preprocessor,$(DEFINES) $(ACDEFINES) $^ -o brand.dtd)
ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
FRAMEWORK_NAME = XUL
FRAMEWORK_VERSION = $(MOZILLA_VERSION)
FRAMEWORK_DIR = \
$(DIST)/$(FRAMEWORK_NAME).framework/Versions/$(FRAMEWORK_VERSION)
$(FRAMEWORK_DIR)/Resources:
$(NSINSTALL) -D $@
tools:: $(PROGRAM) $(FRAMEWORK_DIR)/Resources
$(NSINSTALL) $(srcdir)/macbuild/InfoPlist.strings $(FRAMEWORK_DIR)/Resources
sed -e 's/APP_VERSION/$(APP_VERSION)/' $(srcdir)/macbuild/Info.plist.in > $(FRAMEWORK_DIR)/Info.plist
rsync -av $(DIST)/bin/ $(FRAMEWORK_DIR) --exclude mangle --exclude shlibsign
rm -f $(DIST)/$(FRAMEWORK_NAME).framework/Versions/Current \
$(DIST)/$(FRAMEWORK_NAME).framework/libxpcom.dylib \
$(DIST)/$(FRAMEWORK_NAME).framework/XUL \
$(DIST)/$(FRAMEWORK_NAME).framework/xulrunner
ln -s $(FRAMEWORK_VERSION) $(DIST)/$(FRAMEWORK_NAME).framework/Versions/Current
ln -s Versions/Current/libxpcom.dylib $(DIST)/$(FRAMEWORK_NAME).framework/libxpcom.dylib
ln -s Versions/Current/XUL $(DIST)/$(FRAMEWORK_NAME).framework/XUL
ln -s Versions/Current/xulrunner $(DIST)/$(FRAMEWORK_NAME).framework/xulrunner
clean clobber::
rm -rf $(DIST)/$(FRAMEWORK_NAME).framework
endif
README_FILE = $(srcdir)/../README.xulrunner
libs::
$(INSTALL) $(IFLAGS1) $(README_FILE) $(DIST)/bin
$(INSTALL) $(IFLAGS1) $(topsrcdir)/LICENSE $(DIST)/bin
$(INSTALL) $(IFLAGS1) $(srcdir)/install_app.py $(DIST)/bin
Binary file not shown.

After

Width:  |  Height:  |  Size: 744 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

+221
View File
@@ -0,0 +1,221 @@
#!/usr/bin/env python
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/.
# Min version of python is 2.7
import sys
if ((sys.version_info.major != 2) or (sys.version_info.minor < 7)):
raise Exception("You need to use Python version 2.7 or higher")
import os, shutil, re, zipfile
from ConfigParser import SafeConfigParser
# Platform-specific support
# see https://developer.mozilla.org/en/XULRunner/Deploying_XULRunner_1.8
if sys.platform.startswith('linux') or sys.platform == "win32":
def installApp(appLocation, installDir, appName, greDir):
zipApp, iniParser, appName = validateArguments(appLocation, installDir, appName, greDir)
if (zipApp):
zipApp.extractAll(installDir)
else:
shutil.copytree(appLocation, installDir)
shutil.copy2(os.path.join(greDir, xulrunnerStubName),
os.path.join(installDir, appName))
copyGRE(greDir, os.path.join(installDir, "xulrunner"))
if sys.platform.startswith('linux'):
xulrunnerStubName = "xulrunner-stub"
def makeAppName(leafName):
return leafName.lower()
elif sys.platform == "win32":
xulrunnerStubName = "xulrunner-stub.exe"
def makeAppName(leafName):
return leafName + ".exe"
elif sys.platform == "darwin":
xulrunnerStubName = "xulrunner-stub"
def installApp(appLocation, installDir, appName, greDir):
zipApp, iniparser, appName = validateArguments(appLocation, installDir, appName, greDir)
installDir += "/" + appName + ".app"
resourcesDir = os.path.join(installDir, "Contents/Resources")
if (zipApp):
zipApp.extractAll(resourcesDir)
else:
shutil.copytree(appLocation, resourcesDir)
MacOSDir = os.path.join(installDir, "Contents/MacOS")
os.makedirs(MacOSDir)
shutil.copy2(os.path.join(greDir, xulrunnerStubName), MacOSDir)
copyGRE(greDir,
os.path.join(installDir, "Contents/Frameworks/XUL.framework"))
# Contents/Info.plist
contents = """<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleExecutable</key>
<string>xulrunner</string>
<key>NSAppleScriptEnabled</key>
<true/>
<key>CFBundleGetInfoString</key>
<string>$infoString</string>
<key>CFBundleName</key>
<string>$appName</string>
<key>CFBundleShortVersionString</key>
<string>$version</string>
<key>CFBundleVersion</key>
<string>$version.$buildID</string>
<key>CFBundleIdentifier</key>
<string>$reverseVendor</string>
</dict>
</plist>
"""
version = iniparser.get("App", "Version")
buildID = iniparser.get("App", "BuildID")
infoString = appName + " " + version
reverseVendor = "com.vendor.unknown"
appID = iniparser.get("App", "ID")
colonIndex = appID.find("@") + 1
if (colonIndex != 0):
vendor = appID[colonIndex:]
reverseVendor = ".".join(vendor.split(".")[::-1])
contents = contents.replace("$infoString", infoString)
contents = contents.replace("$appName", appName)
contents = contents.replace("$version", version)
contents = contents.replace("$buildID", buildID)
contents = contents.replace("$reverseVendor", reverseVendor)
infoPList = open(os.path.join(installDir, "Contents/Info.plist"), "w+b")
infoPList.write(contents)
infoPList.close()
def makeAppName(leafName):
return leafName
else:
# Implement xulrunnerStubName, installApp and makeAppName as above.
raise Exception("This operating system isn't supported for install_app.py yet!")
# End platform-specific support
def resolvePath(path):
return os.path.realpath(path)
def requireINIOption(iniparser, section, option):
if not (iniparser.has_option(section, option)):
raise Exception("application.ini must have a " + option + " option under the " + section + " section")
def checkAppINI(appLocation):
if (os.path.isdir(appLocation)):
zipApp = None
appINIPath = os.path.join(appLocation, "application.ini")
if not (os.path.isfile(appINIPath)):
raise Exception(appINIPath + " does not exist")
appINI = open(appINIPath)
elif (zipfile.is_zipfile(appLocation)):
zipApp = zipfile.ZipFile(appLocation)
if not ("application.ini" in zipApp.namelist()):
raise Exception("jar:" + appLocation + "!/application.ini does not exist")
appINI = zipApp.open("application.ini")
else:
raise Exception("appLocation must be a directory containing application.ini or a zip file with application.ini at its root")
# application.ini verification
iniparser = SafeConfigParser()
iniparser.readfp(appINI)
if not (iniparser.has_section("App")):
raise Exception("application.ini must have an App section")
if not (iniparser.has_section("Gecko")):
raise Exception("application.ini must have a Gecko section")
requireINIOption(iniparser, "App", "Name")
requireINIOption(iniparser, "App", "Version")
requireINIOption(iniparser, "App", "BuildID")
requireINIOption(iniparser, "App", "ID")
requireINIOption(iniparser, "Gecko", "MinVersion")
return zipApp, iniparser
pass
def copyGRE(greDir, targetDir):
shutil.copytree(greDir, targetDir, symlinks=True)
def validateArguments(appLocation, installDir, appName, greDir):
# application directory / zip verification
appLocation = resolvePath(appLocation)
# target directory
installDir = resolvePath(installDir)
if (os.path.exists(installDir)):
raise Exception("installDir must not exist: " + cmds.installDir)
greDir = resolvePath(greDir)
xulrunnerStubPath = os.path.isfile(os.path.join(greDir, xulrunnerStubName))
if not xulrunnerStubPath:
raise Exception("XULRunner stub executable not found: " + os.path.join(greDir, xulrunnerStubName))
# appName
zipApp, iniparser = checkAppINI(appLocation)
if not appName:
appName = iniparser.get("App", "Name")
appName = makeAppName(appName)
pattern = re.compile("[\\\/\:*?\"<>|\x00]")
if pattern.search(appName):
raise Exception("App name has illegal characters for at least one operating system")
return zipApp, iniparser, appName
def handleCommandLine():
import argparse
# Argument parsing.
parser = argparse.ArgumentParser(
description="XULRunner application installer",
usage="""install_app.py appLocation installDir greDir [--appName APPNAME]
install_app.py -h
install_app.py --version
"""
)
parser.add_argument(
"appLocation",
action="store",
help="The directory or ZIP file containing application.ini as a top-level child file"
)
parser.add_argument(
"installDir",
action="store",
help="The directory to install the application to"
)
parser.add_argument(
"--greDir",
action="store",
help="The directory containing the Gecko SDK (usually where this Python script lives)",
default=os.path.dirname(sys.argv[0])
)
parser.add_argument(
"--appName",
action="store",
help="The name of the application to install"
)
parser.add_argument("--version", action="version", version="%(prog)s 1.0")
# The command code.
cmds = parser.parse_args()
try:
installApp(cmds.appLocation, cmds.installDir, cmds.appName, cmds.greDir)
except exn:
shutil.rmtree(cmds.installDir)
raise exn
print cmds.appName + " application installed to " + cmds.installDir
if __name__ == '__main__':
handleCommandLine()
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>xulrunner-bin</string>
<key>CFBundleIdentifier</key>
<string>org.mozilla.xulrunner</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>XULRunner</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleSignature</key>
<string>MOZB</string>
<key>CFBundleVersion</key>
<string>APP_VERSION</string>
<key>LSMinimumSystemVersion</key>
<string>10.5</string>
<key>LSMinimumSystemVersionByArchitecture</key>
<dict>
<key>i386</key>
<string>10.5.0</string>
<key>x86_64</key>
<string>10.6.0</string>
</dict>
</dict>
</plist>
Binary file not shown.
+70
View File
@@ -0,0 +1,70 @@
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
GeckoProgram('xulrunner')
SOURCES += [
'nsXULRunnerApp.cpp',
]
DEFINES['XULRUNNER_PROGNAME'] = '"xulrunner"'
if CONFIG['MOZ_DEBUG']:
DEFINES['DEBUG'] = True
LOCAL_INCLUDES += [
'/toolkit/profile',
'/toolkit/xre',
'/xpcom/base',
'/xpcom/build',
]
if CONFIG['_MSC_VER']:
# Always enter a Windows program through wmain, whether or not we're
# a console application.
WIN32_EXE_LDFLAGS += ['-ENTRY:wmainCRTStartup']
# Control the default heap size.
# This is the heap returned by GetProcessHeap().
# As we use the CRT heap, the default size is too large and wastes VM.
#
# The default heap size is 1MB on Win32.
# The heap will grow if need be.
#
# Set it to 256k. See bug 127069.
if CONFIG['OS_ARCH'] == 'WINNT' and not CONFIG['GNU_CC']:
LDFLAGS += ['/HEAP:0x40000']
if CONFIG['OS_ARCH'] == 'WINNT':
RCINCLUDE = 'splash.rc'
OS_LIBS += [
'comctl32',
'comdlg32',
'uuid',
'shell32',
'ole32',
'oleaut32',
'version',
'winspool',
]
DISABLE_STL_WRAPPING = True
JS_PREFERENCE_PP_FILES += [
'xulrunner.js',
]
if CONFIG['OS_ARCH'] == 'WINNT':
BRANDING_FILES += [
'document.ico',
'xulrunner.ico',
]
if CONFIG['MOZ_WIDGET_GTK']:
BRANDING_FILES += [
'default16.png',
'default32.png',
'default48.png',
]
@@ -0,0 +1,294 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "nsXULAppAPI.h"
#include "nsXPCOMGlue.h"
#include <stdio.h>
#include <stdlib.h>
#ifdef XP_WIN
#include <windows.h>
#if defined(_MSC_VER) && _MSC_VER < 1900
#define snprintf _snprintf
#endif
#define strcasecmp _stricmp
#endif
#include "nsAppRunner.h"
#include "nsIFile.h"
#include "nsCOMPtr.h"
#include "nsMemory.h"
#include "nsCRTGlue.h"
#include "nsStringAPI.h"
#include "nsServiceManagerUtils.h"
#include "plstr.h"
#include "prprf.h"
#include "prenv.h"
#include "nsINIParser.h"
#ifdef XP_WIN
#define XRE_DONT_SUPPORT_XPSP2 // See https://bugzil.la/1023941#c32
#include "nsWindowsWMain.cpp"
#endif
#include "BinaryPath.h"
#include "nsXPCOMPrivate.h" // for MAXPATHLEN and XPCOM_DLL
using namespace mozilla;
/**
* Output a string to the user. This method is really only meant to be used to
* output last-ditch error messages designed for developers NOT END USERS.
*
* @param isError
* Pass true to indicate severe errors.
* @param fmt
* printf-style format string followed by arguments.
*/
static void Output(bool isError, const char *fmt, ... )
{
va_list ap;
va_start(ap, fmt);
#if (defined(XP_WIN) && !MOZ_WINCONSOLE)
wchar_t msg[2048];
_vsnwprintf(msg, sizeof(msg)/sizeof(msg[0]), NS_ConvertUTF8toUTF16(fmt).get(), ap);
UINT flags = MB_OK;
if (isError)
flags |= MB_ICONERROR;
else
flags |= MB_ICONINFORMATION;
MessageBoxW(nullptr, msg, L"XULRunner", flags);
#else
vfprintf(stderr, fmt, ap);
#endif
va_end(ap);
}
/**
* Return true if |arg| matches the given argument name.
*/
static bool IsArg(const char* arg, const char* s)
{
if (*arg == '-')
{
if (*++arg == '-')
++arg;
return !strcasecmp(arg, s);
}
#if defined(XP_WIN)
if (*arg == '/')
return !strcasecmp(++arg, s);
#endif
return false;
}
static nsresult
GetGREVersion(const char *argv0,
nsACString *aMilestone,
nsACString *aVersion)
{
if (aMilestone)
aMilestone->AssignLiteral("<Error>");
if (aVersion)
aVersion->AssignLiteral("<Error>");
nsCOMPtr<nsIFile> iniFile;
nsresult rv = BinaryPath::GetFile(argv0, getter_AddRefs(iniFile));
if (NS_FAILED(rv))
return rv;
iniFile->SetNativeLeafName(NS_LITERAL_CSTRING("platform.ini"));
nsINIParser parser;
rv = parser.Init(iniFile);
if (NS_FAILED(rv))
return rv;
if (aMilestone) {
rv = parser.GetString("Build", "Milestone", *aMilestone);
if (NS_FAILED(rv))
return rv;
}
if (aVersion) {
rv = parser.GetString("Build", "BuildID", *aVersion);
if (NS_FAILED(rv))
return rv;
}
return NS_OK;
}
static void Usage(const char *argv0)
{
nsAutoCString milestone;
GetGREVersion(argv0, &milestone, nullptr);
// display additional information (XXX make localizable?)
Output(false,
"Mozilla XULRunner %s\n\n"
"Usage: " XULRUNNER_PROGNAME " [OPTIONS]\n"
" " XULRUNNER_PROGNAME " APP-FILE [APP-OPTIONS...]\n"
"\n"
"OPTIONS\n"
" --app specify APP-FILE (optional)\n"
" -h, --help show this message\n"
" -v, --version show version\n"
" --gre-version print the GRE version string on stdout\n"
"\n"
"APP-FILE\n"
" Application initialization file.\n"
"\n"
"APP-OPTIONS\n"
" Application specific options.\n",
milestone.get());
}
XRE_GetFileFromPathType XRE_GetFileFromPath;
XRE_CreateAppDataType XRE_CreateAppData;
XRE_FreeAppDataType XRE_FreeAppData;
XRE_mainType XRE_main;
static const nsDynamicFunctionLoad kXULFuncs[] = {
{ "XRE_GetFileFromPath", (NSFuncPtr*) &XRE_GetFileFromPath },
{ "XRE_CreateAppData", (NSFuncPtr*) &XRE_CreateAppData },
{ "XRE_FreeAppData", (NSFuncPtr*) &XRE_FreeAppData },
{ "XRE_main", (NSFuncPtr*) &XRE_main },
{ nullptr, nullptr }
};
class AutoAppData
{
public:
AutoAppData(nsIFile* aINIFile) : mAppData(nullptr) {
nsresult rv = XRE_CreateAppData(aINIFile, &mAppData);
if (NS_FAILED(rv))
mAppData = nullptr;
}
~AutoAppData() {
if (mAppData)
XRE_FreeAppData(mAppData);
}
operator nsXREAppData*() const { return mAppData; }
nsXREAppData* operator -> () const { return mAppData; }
private:
nsXREAppData* mAppData;
};
int main(int argc, char* argv[])
{
char exePath[MAXPATHLEN];
nsresult rv = mozilla::BinaryPath::Get(argv[0], exePath);
if (NS_FAILED(rv)) {
Output(true, "Couldn't calculate the application directory.\n");
return 255;
}
char *lastSlash = strrchr(exePath, XPCOM_FILE_PATH_SEPARATOR[0]);
if (!lastSlash || (size_t(lastSlash - exePath) > MAXPATHLEN - sizeof(XPCOM_DLL) - 1))
return 255;
strcpy(++lastSlash, XPCOM_DLL);
rv = XPCOMGlueStartup(exePath);
if (NS_FAILED(rv)) {
Output(true, "Couldn't load XPCOM.\n");
return 255;
}
if (argc > 1 && (IsArg(argv[1], "h") ||
IsArg(argv[1], "help") ||
IsArg(argv[1], "?")))
{
Usage(argv[0]);
return 0;
}
if (argc == 2 && (IsArg(argv[1], "v") || IsArg(argv[1], "version")))
{
nsAutoCString milestone;
nsAutoCString version;
GetGREVersion(argv[0], &milestone, &version);
Output(false, "Mozilla XULRunner %s - %s\n",
milestone.get(), version.get());
return 0;
}
rv = XPCOMGlueLoadXULFunctions(kXULFuncs);
if (NS_FAILED(rv)) {
Output(true, "Couldn't load XRE functions.\n");
return 255;
}
if (argc > 1) {
nsAutoCString milestone;
rv = GetGREVersion(argv[0], &milestone, nullptr);
if (NS_FAILED(rv))
return 2;
if (IsArg(argv[1], "gre-version")) {
if (argc != 2) {
Usage(argv[0]);
return 1;
}
printf("%s\n", milestone.get());
return 0;
}
if (IsArg(argv[1], "install-app")) {
Output(true, "--install-app support has been removed. Use 'python install-app.py' instead.\n");
return 1;
}
}
const char *appDataFile = getenv("XUL_APP_FILE");
if (!(appDataFile && *appDataFile)) {
if (argc < 2) {
Usage(argv[0]);
return 1;
}
if (IsArg(argv[1], "app")) {
if (argc == 2) {
Usage(argv[0]);
return 1;
}
argv[1] = argv[0];
++argv;
--argc;
}
appDataFile = argv[1];
argv[1] = argv[0];
++argv;
--argc;
static char kAppEnv[MAXPATHLEN];
snprintf(kAppEnv, MAXPATHLEN, "XUL_APP_FILE=%s", appDataFile);
putenv(kAppEnv);
}
nsCOMPtr<nsIFile> appDataLF;
rv = XRE_GetFileFromPath(appDataFile, getter_AddRefs(appDataLF));
if (NS_FAILED(rv)) {
Output(true, "Error: unrecognized application.ini path.\n");
return 2;
}
AutoAppData appData(appDataLF);
if (!appData) {
Output(true, "Error: couldn't parse application.ini.\n");
return 2;
}
return XRE_main(argc, argv, appData, 0);
}
+22
View File
@@ -0,0 +1,22 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include <windows.h>
#include "nsNativeAppSupportWin.h"
1 24 "xulrunner.exe.manifest"
IDI_APPICON ICON XULRUNNER_ICO
IDI_DOCUMENT ICON DOCUMENT_ICO
IDI_APPLICATION ICON XULRUNNER_ICO
STRINGTABLE DISCARDABLE
BEGIN
#ifdef DEBUG
IDS_STARTMENU_APPNAME, "Firefox Debug"
#else
IDS_STARTMENU_APPNAME, "Firefox"
#endif
END
@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="*"
name="Mozilla.XULRunner"
type="win32"
/>
<description>Mozilla XULRunner</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
<ms_asmv3:trustInfo xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3">
<ms_asmv3:security>
<ms_asmv3:requestedPrivileges>
<ms_asmv3:requestedExecutionLevel level="asInvoker" uiAccess="false" />
</ms_asmv3:requestedPrivileges>
</ms_asmv3:security>
</ms_asmv3:trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
</application>
</compatibility>
</assembly>
Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

+26
View File
@@ -0,0 +1,26 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#filter substitution
// We need to override the default values of these preferences since all.js
// assumes these are in the navigator package, which for us is nonexistent.
// XXX(darin): perhaps all.js should not be seamonkey specific
pref("general.useragent.locale", "@AB_CD@");
pref("xpinstall.dialog.confirm", "chrome://mozapps/content/xpinstall/xpinstallConfirm.xul");
pref("xpinstall.dialog.progress.chrome", "chrome://mozapps/content/extensions/extensions.xul");
pref("xpinstall.dialog.progress.skin", "chrome://mozapps/content/extensions/extensions.xul");
pref("xpinstall.dialog.progress.type.chrome", "Extension:Manager");
pref("xpinstall.dialog.progress.type.skin", "Extension:Manager");
pref("xpinstall.enabled", true);
#ifdef XP_WIN
pref("browser.preferences.instantApply", false);
#else
pref("browser.preferences.instantApply", true);
#endif
#ifdef XP_MACOSX
pref("browser.preferences.animateFadeIn", true);
#else
pref("browser.preferences.animateFadeIn", false);
#endif
+9
View File
@@ -0,0 +1,9 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# This file specifies the build flags for XULRunner. You can use it by adding:
# . $topsrcdir/xulrunner/config/mozconfig
# to the top of your mozconfig file.
ac_add_options --enable-application=xulrunner
@@ -0,0 +1,7 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# This file is included at the top of all xulrunner mozconfigs
. "$topsrcdir/build/mozconfig.common"
@@ -0,0 +1,8 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# This file is included at the bottom of all xulrunner mozconfigs
. "$topsrcdir/build/mozconfig.common.override"
. "$topsrcdir/build/mozconfig.cache"
@@ -0,0 +1,9 @@
export MOZILLA_OFFICIAL=1
export JAVA_HOME=/tools/jdk
ac_add_options --enable-application=xulrunner
ac_add_options --disable-tests
. $topsrcdir/build/unix/mozconfig.linux32
. "$topsrcdir/xulrunner/config/mozconfigs/common.override"
@@ -0,0 +1,15 @@
export MOZILLA_OFFICIAL=1
export JAVA_HOME=/tools/jdk
ac_add_options --enable-application=xulrunner
ac_add_options --disable-tests
. $topsrcdir/build/unix/mozconfig.linux32
# QT Options
export PKG_CONFIG_PATH=/tools/qt-4.6.3/qt/lib/pkgconfig
ac_add_options --with-qtdir=/tools/qt-4.6.3/qt
ac_add_options --enable-default-toolkit=cairo-qt
ac_add_options --disable-crashreporter
. "$topsrcdir/xulrunner/config/mozconfigs/common.override"
@@ -0,0 +1,9 @@
export MOZILLA_OFFICIAL=1
export JAVA_HOME=/tools/jdk
ac_add_options --enable-application=xulrunner
ac_add_options --disable-tests
. $topsrcdir/build/unix/mozconfig.linux
. "$topsrcdir/xulrunner/config/mozconfigs/common.override"
@@ -0,0 +1,9 @@
. $topsrcdir/build/macosx/universal/mozconfig
export MOZILLA_OFFICIAL=1
ac_add_options --enable-application=xulrunner
ac_add_options --disable-tests
ac_add_options --with-xulrunner-stub-name=xulrunner-stub
. "$topsrcdir/xulrunner/config/mozconfigs/common.override"
@@ -0,0 +1,16 @@
. "$topsrcdir/xulrunner/config/mozconfigs/common"
export MOZILLA_OFFICIAL=1
export JAVA_HOME=/d/jdk1.6.0_14
ac_add_options --enable-application=xulrunner
ac_add_options --enable-jemalloc
ac_add_options --disable-tests
if test "$PROCESSOR_ARCHITECTURE" = "AMD64" -o "$PROCESSOR_ARCHITEW6432" = "AMD64"; then
. $topsrcdir/build/win32/mozconfig.vs2013-win64
else
. $topsrcdir/build/win32/mozconfig.vs2010
fi
. "$topsrcdir/xulrunner/config/mozconfigs/common.override"
@@ -0,0 +1,15 @@
. "$topsrcdir/xulrunner/config/mozconfigs/common"
ac_add_options --target=x86_64-pc-mingw32
ac_add_options --host=x86_64-pc-mingw32
export MOZILLA_OFFICIAL=1
export JAVA_HOME=/d/jdk1.6.0_14
ac_add_options --enable-application=xulrunner
ac_add_options --enable-jemalloc
ac_add_options --disable-tests
. $topsrcdir/build/win64/mozconfig.vs2013
. "$topsrcdir/xulrunner/config/mozconfigs/common.override"
+11
View File
@@ -0,0 +1,11 @@
dnl -*- Mode: Autoconf; tab-width: 2; indent-tabs-mode: nil; -*-
dnl vi: set tabstop=2 shiftwidth=2 expandtab:
dnl This Source Code Form is subject to the terms of the Mozilla Public
dnl License, v. 2.0. If a copy of the MPL was not distributed with this
dnl file, You can obtain one at http://mozilla.org/MPL/2.0/.
dnl Things we need to carry from confvars.sh
AC_SUBST(MOZ_XULRUNNER)
AC_DEFINE(MOZ_XULRUNNER)
dnl Optional parts of the build.
+28
View File
@@ -0,0 +1,28 @@
#! /bin/sh
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
MOZ_XULRUNNER=1
MC_OFFICIAL=1
MOZ_APP_NAME=xulrunner
MOZ_APP_DISPLAYNAME=XULRunner
MOZ_APP_VERSION=$MOZILLA_VERSION
MOZ_CHROME_FILE_FORMAT=omni
MOZ_UPDATER=1
if test "$OS_ARCH" = "WINNT"; then
MOZ_MAINTENANCE_SERVICE=
fi
MOZ_PLACES=1
MOZ_WEBRTC=1
MOZ_WEBGL_CONFORMANT=1
MOZ_EXTENSIONS_DEFAULT=" gio"
MOZ_SERVICES_COMMON=1
MOZ_SERVICES_SYNC=1
MOZ_SERVICES_HEALTHREPORT=
+7
View File
@@ -0,0 +1,7 @@
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
DIRS += ['simple']
@@ -0,0 +1,43 @@
#filter substitution
[App]
;
; This field specifies your organization's name. This field is recommended,
; but optional.
Vendor=MozillaTest
;
; This field specifies your application's name. This field is required.
Name=Simple
;
; This field specifies your application's version. This field is required.
Version=0.1
;
; This field specifies your application's build ID (timestamp). This field is
; required.
BuildID=20070625
;
; This field specifies a compact copyright notice for your application. This
; field is optional.
Copyright=Copyright (c) 2004 Mozilla.org
;
; This ID is just an example. Every XUL app ought to have it's own unique ID.
; You can use the microsoft "guidgen" or "uuidgen" tools, or go on
; irc.mozilla.org and /msg botbot uuid. This field is optional.
ID={3aea3f07-ffe3-4060-bb03-bff3a5365e90}
[Gecko]
;
; This field is required. It specifies the minimum Gecko version that this
; application requires.
MinVersion=@MOZILLA_VERSION_U@
;
; This field is optional. It specifies the maximum Gecko version that this
; application requires. It should be specified if your application uses
; unfrozen interfaces.
MaxVersion=@MOZILLA_VERSION_U@
[Shell]
;
; This field specifies the location of your application's main icon with file
; extension excluded. NOTE: Unix style file separators are required. This
; field is optional.
Icon=chrome/icons/default/simple
@@ -0,0 +1,7 @@
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
DIRS += ['public', 'src']
@@ -0,0 +1,13 @@
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
XPIDL_SOURCES += [
'nsISimpleTest.idl',
]
XPIDL_MODULE = 'simple'
XPI_NAME = 'simple'
@@ -0,0 +1,15 @@
/* vim:set ts=2 sw=2 sts=2 et cin: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "nsISupports.idl"
[scriptable, uuid(f2f71d91-0451-47ec-aaa0-166663a7711a)]
interface nsISimpleTest : nsISupports
{
/**
* This interface adds two numbers together and returns the result.
*/
long add(in long a, in long b);
};
@@ -0,0 +1,54 @@
/* vim:set ts=2 sw=2 sts=2 et cin: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include <stdio.h>
#include "nsISimpleTest.h"
#include "mozilla/ModuleUtils.h"
class SimpleTest : public nsISimpleTest
{
~SimpleTest() {}
public:
NS_DECL_ISUPPORTS
NS_DECL_NSISIMPLETEST
};
NS_IMPL_ISUPPORTS(SimpleTest, nsISimpleTest)
NS_IMETHODIMP
SimpleTest::Add(int32_t a, int32_t b, int32_t *r)
{
printf("add(%d,%d) from C++\n", a, b);
*r = a + b;
return NS_OK;
}
NS_GENERIC_FACTORY_CONSTRUCTOR(SimpleTest)
// 5e14b432-37b6-4377-923b-c987418d8429
#define SIMPLETEST_CID \
{ 0x5e14b432, 0x37b6, 0x4377, \
{ 0x92, 0x3b, 0xc9, 0x87, 0x41, 0x8d, 0x84, 0x29 } }
NS_DEFINE_NAMED_CID(SIMPLETEST_CID);
static const mozilla::Module::CIDEntry kSimpleCIDs[] = {
{ &kSIMPLETEST_CID, false, nullptr, SimpleTestConstructor },
{ nullptr }
};
static const mozilla::Module::ContractIDEntry kSimpleContracts[] = {
{ "@test.mozilla.org/simple-test;1?impl=c++", &kSIMPLETEST_CID },
{ nullptr }
};
static const mozilla::Module kSimpleModule = {
mozilla::Module::kVersion,
kSimpleCIDs,
kSimpleContracts
};
NSMODULE_DEFN(SimpleTestModule) = &kSimpleModule;
@@ -0,0 +1,27 @@
/* vim:set ts=2 sw=2 sts=2 et cin: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
function SimpleTest() {
}
SimpleTest.prototype = {
classID: Components.ID("{4177e257-a0dc-49b9-a774-522a000a49fa}"),
QueryInterface: function(iid) {
if (iid.equals(Components.interfaces.nsISimpleTest) ||
iid.equals(Components.interfaces.nsISupports))
return this;
throw Components.results.NS_ERROR_NO_INTERFACE;
},
add: function(a, b) {
dump("add(" + a + "," + b + ") from JS\n");
return a + b;
}
};
this.NSGetFactory = XPCOMUtils.generateNSGetFactory([SimpleTest]);
@@ -0,0 +1,2 @@
component {4177e257-a0dc-49b9-a774-522a000a49fa} SimpleTest.js
contract @test.mozilla.org/simple-test;1?impl=js {4177e257-a0dc-49b9-a774-522a000a49fa}
@@ -0,0 +1,21 @@
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
SOURCES += [
'SimpleTest.cpp',
]
XPCOMBinaryComponent('simpletest')
EXTRA_COMPONENTS += [
'SimpleTest.js',
'SimpleTest.manifest',
]
XPI_NAME = 'simple'
if CONFIG['GNU_CXX']:
CXXFLAGS += ['-Wshadow']
@@ -0,0 +1,17 @@
/* vim:set ts=2 sw=2 sts=2 et cin: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
function onButtonClick() {
var textbox = document.getElementById("textbox");
var contractid = (textbox.value % 2 == 0) ?
"@test.mozilla.org/simple-test;1?impl=js" :
"@test.mozilla.org/simple-test;1?impl=c++";
var test = Components.classes[contractid].
createInstance(Components.interfaces.nsISimpleTest);
textbox.value = test.add(textbox.value, 1);
}
@@ -0,0 +1,20 @@
<?xml version="1.0"?>
# vim:set ts=8 sw=8 sts=8 noet:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://simple/locale/simple.dtd">
<window
id = "simple"
title = "&simple.title;"
xmlns = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script src="chrome://simple/content/simple.js"/>
<vbox>
<textbox id="textbox" value="&simple.textValue;" flex="1"/>
<button id="button" label="&simple.buttonLabel;" oncommand="onButtonClick();"/>
</vbox>
</window>
Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

@@ -0,0 +1,12 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
simple.jar:
% content simple %content/
content/simple.xul (content/simple.xul)
content/simple.js (content/simple.js)
en-US.jar:
% locale simple en-US %locale/en-US/
locale/en-US/simple.dtd (locale/simple.dtd)
@@ -0,0 +1,7 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<!ENTITY simple.title "Simple App">
<!ENTITY simple.textValue "0">
<!ENTITY simple.buttonLabel "Increment">
@@ -0,0 +1,22 @@
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
DIRS += ['components']
XPI_NAME = 'simple'
JAR_MANIFESTS += ['jar.mn']
JS_PREFERENCE_FILES += [
'simple-prefs.js',
]
FINAL_TARGET_PP_FILES += [
'application.ini',
]
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
FINAL_TARGET_FILES.chrome.icons.default += ['icons/simple.ico']
@@ -0,0 +1,6 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
pref("toolkit.defaultChromeURI", "chrome://simple/content/simple.xul");
pref("general.useragent.extra.simple", "SimpleApp/0.1");
+148
View File
@@ -0,0 +1,148 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
STANDALONE_MAKEFILE := 1
NO_PKG_FILES = \
xulrunner-config \
regchrome* \
regxpcom* \
$(NULL)
# We want xpcshell, run-mozilla and install_app.py in the SDK but not in the binary package.
ifndef STAGE_SDK
NO_PKG_FILES += \
xpcshell* \
run-mozilla* \
install_app.py \
$(NULL)
endif
# If we're on mac, we don't want an end-user-facing DMG, we want a .tar.bz2
# which developers then use to package their application.
ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
MOZ_PKG_FORMAT = BZ2
_APPNAME = XUL.framework
_BINPATH = /$(_APPNAME)/Versions/Current
_RESPATH := $(_BINPATH)
endif
include $(topsrcdir)/config/rules.mk
INSTALL_SDK = 1
include $(topsrcdir)/toolkit/mozapps/installer/signing.mk
include $(topsrcdir)/toolkit/mozapps/installer/packager.mk
# Add pkg-config files to the install:: target
pkg_config_files = \
libxul.pc \
libxul-embedding.pc \
mozilla-js.pc \
mozilla-plugin.pc \
$(NULL)
ifdef MOZ_NATIVE_NSPR
NSPR_NAME=nspr
NSPR_VERSION=$(shell $(NSPR_CONFIG) --version)
else
pkg_config_files += mozilla-nspr.pc
NSPR_NAME=mozilla-nspr
FULL_NSPR_CFLAGS=-I\$${includedir}
FULL_NSPR_LIBS=$(subst $(prefix),\$${sdkdir},$(shell $(DEPTH)/nsprpub/config/nspr-config --libs))
NSPR_VERSION=$(shell $(DEPTH)/nsprpub/config/nspr-config --version)
endif
MOZ_XUL_LINK = -lxpcomglue_s -lxul
ifdef JS_SHARED_LIBRARY
MOZ_JS_LINK = -lmozjs
else
MOZ_JS_LINK = $(MOZ_XUL_LINK)
endif
$(warning FULL_NSPR_CFLAGS=$(FULL_NSPR_CFLAGS))
ifndef MOZ_NATIVE_NSS
pkg_config_files += mozilla-nss.pc
endif
%.pc: $(srcdir)/%.pc.in $(GLOBAL_DEPS)
cat $< | sed \
-e "s|%prefix%|$(prefix)|" \
-e "s|%includedir%|$(includedir)|" \
-e "s|%idldir%|$(idldir)|" \
-e "s|%sdkdir%|$(sdkdir)|" \
-e "s|%MOZ_APP_NAME%|$(MOZ_APP_NAME)|" \
-e "s|%MOZILLA_VERSION%|$(MOZ_APP_VERSION)|" \
-e "s|%WCHAR_CFLAGS%|$(WCHAR_CFLAGS)|" \
-e "s|%FULL_NSPR_LIBS%|$(FULL_NSPR_LIBS)|" \
-e "s|%FULL_NSPR_CFLAGS%|$(FULL_NSPR_CFLAGS)|" \
-e "s|%NSPR_NAME%|$(NSPR_NAME)|" \
-e "s|%NSPR_VERSION%|$(NSPR_VERSION)|" \
-e "s|%MOZ_XUL_LINK%|$(MOZ_XUL_LINK)|" \
-e "s|%MOZ_JS_LINK%|$(MOZ_JS_LINK)|" > $@
chmod 644 $@
install:: $(pkg_config_files)
@echo pkg_config_file: $(pkg_config_files)
$(SYSINSTALL) $(IFLAGS1) $^ $(DESTDIR)$(libdir)/pkgconfig
GARBAGE += $(pkg_config_files)
GARBAGE += debian/changelog
DEBDESTDIR=debian/$(MOZ_BUILD_APP)
GRE_BUILDID = $(shell $(PYTHON) $(topsrcdir)/config/printconfigsetting.py $(DIST)/bin/platform.ini Build BuildID)
MOZ_DEB_TIMESTAMP = "$(shell date +"%a, %d %b %Y %T %z" )"
DEFINES += \
-DGRE_MILESTONE=$(GRE_MILESTONE) \
-DGRE_BUILDID=$(GRE_BUILDID) \
-DMOZ_DEB_TIMESTAMP=$(MOZ_DEB_TIMESTAMP) \
-DMOZ_APP_NAME=$(MOZ_APP_NAME) \
-Dinstalldir=$(installdir) \
$(NULL)
ifeq ($(OS_TARGET),Linux)
debian/changelog: $(srcdir)/debian/changelog.in $(DIST)/bin/platform.ini
$(call py_action,preprocessor, \
$(AUTOMATION_PPARGS) $(DEFINES) $(ACDEFINES) $^ -o $@)
debian/xulrunner.links: $(srcdir)/debian/xulrunner.links.in
$(call py_action,preprocessor, \
$(AUTOMATION_PPARGS) $(DEFINES) $(ACDEFINES) $^ -o $@)
debian/xulrunner.service: $(srcdir)/debian/xulrunner.service.in
$(call py_action,preprocessor, \
$(AUTOMATION_PPARGS) $(DEFINES) $(ACDEFINES) $^ -o $@)
debian/prerm: $(srcdir)/debian/prerm.in
$(call py_action,preprocessor, \
$(AUTOMATION_PPARGS) $(DEFINES) $(ACDEFINES) $^ -o $@)
debian/postinst: $(srcdir)/debian/postinst.in
$(call py_action,preprocessor, \
$(AUTOMATION_PPARGS) $(DEFINES) $(ACDEFINES) $^ -o $@)
package:
$(MAKE) package -C $(DEPTH)
deb: package debian/changelog debian/xulrunner.service debian/xulrunner.links
$(NSINSTALL) $(topsrcdir)/$(MOZ_BUILD_APP)/installer/debian .
rm -fr $(DEBDESTDIR)
$(NSINSTALL) -D $(DEBDESTDIR)/$(installdir)
cp -pRL $(DEPTH)/dist/$(MOZ_BUILD_APP)/* $(DEBDESTDIR)/$(installdir)
$(NSINSTALL) -D $(DEBDESTDIR)/usr/share/dbus-1/services/
cp debian/$(MOZ_BUILD_APP).service $(DEBDESTDIR)/usr/share/dbus-1/services/org.mozilla.$(MOZ_BUILD_APP).service
dh_link; fakeroot dh_fixperms; fakeroot dh_installdeb; fakeroot dh_shlibdeps; fakeroot dh_gencontrol; fakeroot dh_md5sums; fakeroot dh_builddeb;
endif
DEB_BUILD_ARCH = $(shell dpkg-architecture -qDEB_BUILD_ARCH)
# package name comes from xulrunner/installer/debian/changelog.in
DEB_PKG_NAME = $(MOZ_PKG_APPNAME)_$(GRE_MILESTONE)-$(GRE_BUILDID)_$(DEB_BUILD_ARCH).deb
# relative to $(DIST)
UPLOAD_EXTRA_FILES += ../xulrunner/$(DEB_PKG_NAME)
@@ -0,0 +1,7 @@
# if the naming changes please modify DEB_PKG_NAME in xulrunner/installer/Makefile.in as well
#filter substitution
xulrunner (@GRE_MILESTONE@-@GRE_BUILDID@) unstable; urgency=low
* Mozilla Nightly (Closes: #nnnn) <nnnn is the bug number of your ITP>
-- Mozilla Runtime <mobile-feedback@mozilla.com> @MOZ_DEB_TIMESTAMP@
@@ -0,0 +1 @@
4
@@ -0,0 +1,48 @@
Source: xulrunner
Section: user/network
Priority: extra
Maintainer: Mobile Feedback <mobile-feedback@mozilla.com>
Build-Depends: debhelper (>= 5)
Standards-Version: 3.7.2
Package: xulrunner
Architecture: any
Depends: ${shlibs:Depends}
Description: Web and JavaScript engine used by the Firefox Web browser
The Mozilla runtime is the modern browser engine, also known as "Gecko," that powers Firefox and can be embedded by other applications
XB-Maemo-Display-Name: Mozilla Runtime
XB-Maemo-Icon-26:
MB5!.1PT*&@H````-24A$4@```!H````:"`8```"I2DS.````"7!(67,```L3
M```+$P$`FIP8```%;$E$051(B:667XQ4U1W'/_>>>V?NG=F9V3^S_W%9<'#!
M/Q1;NQ:EQH@:T2"EH>&A34R;]$U?Q%9-VH:41BUJFV"-B<8'^Z!-VP=E?37&
M5=18L"SACVMVH<M.9W>8V9G9N7-G[O_3AP6$LD"$;W*3<T_R^W[.]Y=S3@Z<
ME90H_)\DE\Y=J]3SHW_\1)6O#FV2NVD'D*\,W<T;JWK.0W>3OA[012N68]LW
MD1W^!8?W_XGANQ^C5?V$(V/_8L.VGU.:.JG\\M@[UPK2SD/V#=U,K=QDW;TF
M#S_[&HZC4,^O9_T6'84VWO[PI]>32/MFV.URZ^;G273UT7^7`3&)#%*!TM"U
MS]ZHTC?\B/SUD7\J>\E?,TC^'4%LA4?DS\O^V]<H<L!I.6`:,5S[:#B^T)?1
M\MJZ>]YF8:GLB3@/WIQ!,U1F9AH<V]VX&DB1N]'HS6WFN]L>8>"V`6(=O;)S
M8]O<?"!E%/+ZFZ_R_'-[U;4CZTX6NA_8;VZX_X>IWO3W4\,]W;II4CE3MZJS
M9R9JIPICSOBQ,4Z_4+U<HH@H?H"W7CY`@,&NEUY1>M;?GFBC^=2NWR-434HU
M;OY@\]:'8OTW;3]N&@RM74ER1195Z!0S1E^QS5B3CZL[BHJ<L$_L^1T'?[O_
MDD07_LCQQW]$;M-3M&JEL8EJ[M$?/QN"2*OI[-"JW(AX[&<[J:174NK(D<T-
M(F*"N>EYBJ<7*)VI4%EHL'!ZWG7R\[_AT)Z7+O06YR%_&>PBU;V#RLE]%/]S
M5/A6YK7WIP+1WCLJA"Z:C44*E1H=]SZ*TMF-D=31@?J9&E:Q@EVW<2IUM$Q"
M\U8/W1>MW9)GXMW#Y_R_.;!6(^+SO[VH;/[K%XN'QJ>/C7VR+]CVAY1^XRVJ
M%A?(9`IO=`MS'8-XAH[M!5B-%JUZ`]_U20UT0;-%Z_@I8J&OJ<.]S['QF=RR
MK;M(]^S=R<8-[PA148S\89*WW$GVUN^1T049324I)-;D?VG,E:F7+%+?N9'%
M:I7J=!&W+TLSE<;Y^."?>>^))R].=+%4#+&3,%1"LX?6Z`[\U`W87\]0*Y2H
MN1YU)\0UX]A^2*0+HJ2!.;*2MM4K$%T91,M%B2>VPM;LN5VWC+9T0>P.K!;,
M%8AL"RN10$G$"7K:(1G#C1N8G2F2=XP02/!5B=-R\<(63!>1PH!(K"*W)L<4
MY>5!;4X/]<5V)AM0KX(J"!(F]722T/.(!KHQLYTT58FN0A!&1&Z(W_+P\B6\
M`U_BZW%D6U805FX`/E\>%/D&MB/(SX,:@6&"ZQ`T&MC51?SV#*X21Q,0DZ`&
M+J$?X9>K^">F""HE@DH-?!>D;5R^=:%E4;-<'#N!],#WH!D#31`,KB!038)\
M$5W5<%4)00"A@CST;[P3D_BVA73J$'J`6[\\R)THXVS,T[ZJ`]\#Q8;:/&@Z
M%(`C<;QL%X$O(!T#1<!"!8X>)5I<`,^&R`.$!<Q<83-0I5[X"*7S-M(IJ!6@
M50-A@&-#N0"#JXFZ^J&B@YF&\@($$AP+\``)A!,P>Q(NN!DN;9_2Q._8CB\,
M(@]:<Q#Y$#H0^-!8A,(T%&?`5T#)0*B"-7T6I$CP_PBS!ZX,HEP@3/3C)D:)
MXA"5(*Q!%"Y]01-D"%*'P`17!3L`KP'2!J(/8'8/>,VK@(A@]CBH:PGM'+)\
M=EH#G*55JQF(C8"O@]T`IP&1!()).+4+ZE^=,[L2"&`1YKZ$L!=J-X&B0AIH
M`C;(&O@.!&6(3H.<!N8_A9E?06W\*M[+:A!23T/J('2UH$TNG2!#0DI".H#,
M)&1>!-8M9_!MWFTQB*V&Q"AX(V`,@-3`*X*<`O\@^">6HEX?Z$*90/QLO<]2
:+Z,K%?P/&D=O=_6]@+\`````245.1*Y"8((`
`
@@ -0,0 +1,36 @@
begin 644 -m
MB5!.1PT*&@H````-24A$4@```!H````:"`8```"I2DS.````"7!(67,```L3
M```+$P$`FIP8```%;$E$051(B:667XQ4U1W'/_>>>V?NG=F9V3^S_W%9<'#!
M/Q1;NQ:EQH@:T2"EH>&A34R;]$U?Q%9-VH:41BUJFV"-B<8'^Z!-VP=E?37&
M5=18L"SACVMVH<M.9W>8V9G9N7-G[O_3AP6$LD"$;W*3<T_R^W[.]Y=S3@Z<
ME90H_)\DE\Y=J]3SHW_\1)6O#FV2NVD'D*\,W<T;JWK.0W>3OA[012N68]LW
MD1W^!8?W_XGANQ^C5?V$(V/_8L.VGU.:.JG\\M@[UPK2SD/V#=U,K=QDW;TF
M#S_[&HZC4,^O9_T6'84VWO[PI]>32/MFV.URZ^;G273UT7^7`3&)#%*!TM"U
MS]ZHTC?\B/SUD7\J>\E?,TC^'4%LA4?DS\O^V]<H<L!I.6`:,5S[:#B^T)?1
M\MJZ>]YF8:GLB3@/WIQ!,U1F9AH<V]VX&DB1N]'HS6WFN]L>8>"V`6(=O;)S
M8]O<?"!E%/+ZFZ_R_'-[U;4CZTX6NA_8;VZX_X>IWO3W4\,]W;II4CE3MZJS
M9R9JIPICSOBQ,4Z_4+U<HH@H?H"W7CY`@,&NEUY1>M;?GFBC^=2NWR-434HU
M;OY@\]:'8OTW;3]N&@RM74ER1195Z!0S1E^QS5B3CZL[BHJ<L$_L^1T'?[O_
MDD07_LCQQW]$;M-3M&JEL8EJ[M$?/QN"2*OI[-"JW(AX[&<[J:174NK(D<T-
M(F*"N>EYBJ<7*)VI4%EHL'!ZWG7R\[_AT)Z7+O06YR%_&>PBU;V#RLE]%/]S
M5/A6YK7WIP+1WCLJA"Z:C44*E1H=]SZ*TMF-D=31@?J9&E:Q@EVW<2IUM$Q"
M\U8/W1>MW9)GXMW#Y_R_.;!6(^+SO[VH;/[K%XN'QJ>/C7VR+]CVAY1^XRVJ
M%A?(9`IO=`MS'8-XAH[M!5B-%JUZ`]_U20UT0;-%Z_@I8J&OJ<.]S['QF=RR
MK;M(]^S=R<8-[PA148S\89*WW$GVUN^1T049324I)-;D?VG,E:F7+%+?N9'%
M:I7J=!&W+TLSE<;Y^."?>>^))R].=+%4#+&3,%1"LX?6Z`[\U`W87\]0*Y2H
MN1YU)\0UX]A^2*0+HJ2!.;*2MM4K$%T91,M%B2>VPM;LN5VWC+9T0>P.K!;,
M%8AL"RN10$G$"7K:(1G#C1N8G2F2=XP02/!5B=-R\<(63!>1PH!(K"*W)L<4
MY>5!;4X/]<5V)AM0KX(J"!(F]722T/.(!KHQLYTT58FN0A!&1&Z(W_+P\B6\
M`U_BZW%D6U805FX`/E\>%/D&MB/(SX,:@6&"ZQ`T&MC51?SV#*X21Q,0DZ`&
M+J$?X9>K^">F""HE@DH-?!>D;5R^=:%E4;-<'#N!],#WH!D#31`,KB!038)\
M$5W5<%4)00"A@CST;[P3D_BVA73J$'J`6[\\R)THXVS,T[ZJ`]\#Q8;:/&@Z
M%(`C<;QL%X$O(!T#1<!"!8X>)5I<`,^&R`.$!<Q<83-0I5[X"*7S-M(IJ!6@
M50-A@&-#N0"#JXFZ^J&B@YF&\@($$AP+\``)A!,P>Q(NN!DN;9_2Q._8CB\,
M(@]:<Q#Y$#H0^-!8A,(T%&?`5T#)0*B"-7T6I$CP_PBS!ZX,HEP@3/3C)D:)
MXA"5(*Q!%"Y]01-D"%*'P`17!3L`KP'2!J(/8'8/>,VK@(A@]CBH:PGM'+)\
M=EH#G*55JQF(C8"O@]T`IP&1!()).+4+ZE^=,[L2"&`1YKZ$L!=J-X&B0AIH
M`C;(&O@.!&6(3H.<!N8_A9E?06W\*M[+:A!23T/J('2UH$TNG2!#0DI".H#,
M)&1>!-8M9_!MWFTQB*V&Q"AX(V`,@-3`*X*<`O\@^">6HEX?Z$*90/QLO<]2
:+Z,K%?P/&D=O=_6]@+\`````245.1*Y"8((`
`
end
@@ -0,0 +1,2 @@
?package(xulrunner):needs="X11|text|vc|wm" section="Apps/Internet"\
title="xulrunner" command="/usr/bin/xulrunner"
@@ -0,0 +1,42 @@
#literal #! /bin/sh
#filter substitution
# postinst script for moz
#
# see: dh_installdeb(1)
set -e
# summary of how this script can be called:
# * <postinst> `configure' <most-recently-configured-version>
# * <old-postinst> `abort-upgrade' <new version>
# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
# <new-version>
# * <postinst> `abort-remove'
# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
# <failed-install-package> <version> `removing'
# <conflicting-package> <version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package
case "$1" in
configure)
;;
abort-upgrade|abort-remove|abort-deconfigure)
;;
*)
echo "postinst called with unknown argument \`$1'" >&2
exit 1
;;
esac
#ifdef MOZ_WIDGET_GTK
gtk-update-icon-cache /usr/share/icons/hicolor
#endif
exit 0
@@ -0,0 +1,29 @@
#literal #! /bin/sh
#filter substitution
# prerm script for moz
#
# see: dh_installdeb(1)
set -e
case "$1" in
remove|upgrade|deconfigure)
;;
failed-upgrade)
;;
*)
echo "postinst called with unknown argument \`$1'" >&2
exit 1
;;
esac
#ifdef MOZ_WIDGET_GTK
gtk-update-icon-cache /usr/share/icons/hicolor
#endif
exit 0
@@ -0,0 +1,2 @@
#filter substitution
@installdir@/xulrunner /usr/bin/xulrunner
@@ -0,0 +1,4 @@
#filter substitution
[D-BUS Service]
Name=org.mozilla.@MOZ_APP_NAME@
Exec=@installdir@/xulrunner
@@ -0,0 +1,10 @@
prefix=%prefix%
sdkdir=%sdkdir%
includedir=%includedir%
idldir=%idldir%
Name: libxul-embedding
Description: Static library for version-independent embedding of the Mozilla runtime
Version: %MOZILLA_VERSION%
Libs: -L${sdkdir}/lib -lxpcomglue -ldl
Cflags: -DXPCOM_GLUE -I${includedir} %WCHAR_CFLAGS%
@@ -0,0 +1,11 @@
prefix=%prefix%
sdkdir=%sdkdir%
includedir=%includedir%
idldir=%idldir%
Name: libxul
Description: The Mozilla Runtime and Embedding Engine
Version: %MOZILLA_VERSION%
Requires: %NSPR_NAME% >= %NSPR_VERSION%
Libs: -L${sdkdir}/lib %MOZ_XUL_LINK%
Cflags: -I${includedir} %WCHAR_CFLAGS%
@@ -0,0 +1,6 @@
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
@@ -0,0 +1,10 @@
prefix=%prefix%
sdkdir=%sdkdir%
includedir=%includedir%
Name: JavaScript
Description: The Mozilla JavaScript Library
Version: %MOZILLA_VERSION%
Requires: %NSPR_NAME% >= %NSPR_VERSION%
Libs: -L${sdkdir}/lib %MOZ_JS_LINK%
Cflags: -I${includedir} -DXP_UNIX
@@ -0,0 +1,11 @@
prefix=%prefix%
sdkdir=%sdkdir%
includedir=%includedir%/nspr
Name: NSPR
Description: The Netscape Portable Runtime
Version: %NSPR_VERSION%
Libs: %FULL_NSPR_LIBS%
Cflags: %FULL_NSPR_CFLAGS%
@@ -0,0 +1,10 @@
prefix=%prefix%
sdkdir=%sdkdir%
includedir=%includedir%/nss
Name: NSS
Description: Mozilla Network Security Services
Version: %MOZILLA_VERSION%
Requires: %NSPR_NAME% >= %NSPR_VERSION%
Libs: -L${sdkdir}/lib -lsmime3 -lssl3 -lnss3 -lnssutil3
Cflags: -I${includedir}
@@ -0,0 +1,8 @@
prefix=%prefix%
sdkdir=%sdkdir%
includedir=%includedir%
Name: Mozilla Plug-In API
Description: Mozilla Plug-In API
Version: %MOZILLA_VERSION%
Cflags: -I${includedir} -DXP_UNIX
+39
View File
@@ -0,0 +1,39 @@
ar
bg
ca
cs
da
de
el
en-GB
es-AR
es-ES
eu
fi
fr
ga-IE
gu-IN
he
hu
hy-AM
it
ja
ja-JP-mac
ko
nb-NO
nl
nn-NO
mk
mn
pa-IN
pl
pt-BR
ro
ru
sk
sl
sq
sv-SE
tr
zh-CN
zh-TW
+11
View File
@@ -0,0 +1,11 @@
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
CONFIGURE_SUBST_FILES += ['installer/Makefile']
DIRS += [
'app',
]
+7
View File
@@ -0,0 +1,7 @@
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
include('../../toolkit/moz.configure')
+11
View File
@@ -0,0 +1,11 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
ifndef MOZ_WINCONSOLE
ifdef MOZ_DEBUG
MOZ_WINCONSOLE = 1
else
MOZ_WINCONSOLE = 0
endif
endif
+51
View File
@@ -0,0 +1,51 @@
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# The value of XULRUNNER_STUB_NAME is generated by configure to allow XULRunner
# apps to override it using the --with-xulrunner-stub-name=<appname> argument.
# If this configure argument is not present then the default name is
# 'xulrunner-stub'.
# We don't want to create a dependency on mozglue.
# Statically link against the RTL on windows
GeckoProgram(CONFIG['XULRUNNER_STUB_NAME'], mozglue=None, msvcrt='static')
SOURCES += [
'nsXULStub.cpp',
]
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
FINAL_TARGET = 'dist/XUL.framework/Versions/%(MOZILLA_VERSION)s' % CONFIG
DEFINES['XPCOM_GLUE'] = True
LOCAL_INCLUDES += [
'/xpcom/base',
'/xpcom/build',
]
if CONFIG['OS_ARCH'] == 'WINNT':
LOCAL_INCLUDES += ['/toolkit/xre']
# this is an awful workaround - glandium
USE_LIBS += ['mfbt_staticruntime']
if CONFIG['_MSC_VER']:
WIN32_EXE_LDFLAGS += ['-ENTRY:wmainCRTStartup']
if CONFIG['OS_ARCH'] == 'WINNT':
DEFINES['MOZ_XULRUNNER'] = True
RCINCLUDE = 'xulrunner-stub.rc'
if CONFIG['OS_ARCH'] == 'WINNT':
OS_LIBS += [
'shell32',
]
DISABLE_STL_WRAPPING = True
# Need to link with CoreFoundation on Mac
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
OS_LIBS += CONFIG['TK_LIBS']
+445
View File
@@ -0,0 +1,445 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "nsXPCOMGlue.h"
#include "nsINIParser.h"
#include "nsXPCOMPrivate.h" // for XP MAXPATHLEN
#include "nsXULAppAPI.h"
#include "nsIFile.h"
#include <stdarg.h>
#ifdef XP_WIN
#include <windows.h>
#include <io.h>
#if defined(_MSC_VER) && _MSC_VER < 1900
#define snprintf _snprintf
#define vsnprintf _vsnprintf
#endif
#define strcasecmp _stricmp
#define PATH_SEPARATOR_CHAR '\\'
#define R_OK 04
#elif defined(XP_MACOSX)
#include <unistd.h>
#include <sys/stat.h>
#include <CoreFoundation/CoreFoundation.h>
#define PATH_SEPARATOR_CHAR '/'
#else
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#define PATH_SEPARATOR_CHAR '/'
#endif
#ifdef XP_WIN
#define XRE_DONT_PROTECT_DLL_LOAD
#include "nsWindowsWMain.cpp"
#endif
#define VERSION_MAXLEN 128
static void Output(bool isError, const char *fmt, ... )
{
va_list ap;
va_start(ap, fmt);
#if (defined(XP_WIN) && !MOZ_WINCONSOLE)
char msg[2048];
vsnprintf(msg, sizeof(msg), fmt, ap);
UINT flags = MB_OK;
if (isError)
flags |= MB_ICONERROR;
else
flags |= MB_ICONINFORMATION;
wchar_t wide_msg[1024];
MultiByteToWideChar(CP_ACP,
0,
msg,
-1,
wide_msg,
sizeof(wide_msg) / sizeof(wchar_t));
MessageBoxW(nullptr, wide_msg, L"XULRunner", flags);
#else
vfprintf(stderr, fmt, ap);
#endif
va_end(ap);
}
/**
* Return true if |arg| matches the given argument name.
*/
static bool IsArg(const char* arg, const char* s)
{
if (*arg == '-')
{
if (*++arg == '-')
++arg;
return !strcasecmp(arg, s);
}
#if defined(XP_WIN)
if (*arg == '/')
return !strcasecmp(++arg, s);
#endif
return false;
}
/**
* Return true if |aDir| is a valid file/directory.
*/
static bool FolderExists(const char* aDir)
{
#ifdef XP_WIN
wchar_t wideDir[MAX_PATH];
MultiByteToWideChar(CP_UTF8, 0, aDir, -1, wideDir, MAX_PATH);
DWORD fileAttrs = GetFileAttributesW(wideDir);
return fileAttrs != INVALID_FILE_ATTRIBUTES;
#else
return access(aDir, R_OK) == 0;
#endif
}
static nsresult GetRealPath(const char* appDataFile, char* *aResult)
{
#ifdef XP_WIN
wchar_t wAppDataFile[MAX_PATH];
wchar_t wIniPath[MAX_PATH];
MultiByteToWideChar(CP_UTF8, 0, appDataFile, -1, wAppDataFile, MAX_PATH);
_wfullpath(wIniPath, wAppDataFile, MAX_PATH);
WideCharToMultiByte(CP_UTF8, 0, wIniPath, -1, *aResult, MAX_PATH, 0, 0);
#else
struct stat fileStat;
if (!realpath(appDataFile, *aResult) || stat(*aResult, &fileStat))
return NS_ERROR_FAILURE;
#endif
if (!*aResult || !**aResult)
return NS_ERROR_FAILURE;
return NS_OK;
}
class AutoAppData
{
public:
AutoAppData(nsIFile* aINIFile) : mAppData(nullptr) {
nsresult rv = XRE_CreateAppData(aINIFile, &mAppData);
if (NS_FAILED(rv))
mAppData = nullptr;
}
~AutoAppData() {
if (mAppData)
XRE_FreeAppData(mAppData);
}
operator nsXREAppData*() const { return mAppData; }
nsXREAppData* operator -> () const { return mAppData; }
private:
nsXREAppData* mAppData;
};
XRE_CreateAppDataType XRE_CreateAppData;
XRE_FreeAppDataType XRE_FreeAppData;
XRE_mainType XRE_main;
int
main(int argc, char **argv)
{
nsresult rv;
char *lastSlash;
char iniPath[MAXPATHLEN];
char tmpPath[MAXPATHLEN];
char greDir[MAXPATHLEN];
bool greFound = false;
#if defined(XP_MACOSX)
CFBundleRef appBundle = CFBundleGetMainBundle();
if (!appBundle)
return 1;
CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL(appBundle);
if (!resourcesURL)
return 1;
CFURLRef absResourcesURL = CFURLCopyAbsoluteURL(resourcesURL);
CFRelease(resourcesURL);
if (!absResourcesURL)
return 1;
CFURLRef iniFileURL =
CFURLCreateCopyAppendingPathComponent(kCFAllocatorDefault,
absResourcesURL,
CFSTR("application.ini"),
false);
CFRelease(absResourcesURL);
if (!iniFileURL)
return 1;
CFStringRef iniPathStr =
CFURLCopyFileSystemPath(iniFileURL, kCFURLPOSIXPathStyle);
CFRelease(iniFileURL);
if (!iniPathStr)
return 1;
CFStringGetCString(iniPathStr, iniPath, sizeof(iniPath),
kCFStringEncodingUTF8);
CFRelease(iniPathStr);
#else
#ifdef XP_WIN
wchar_t wide_path[MAX_PATH];
if (!::GetModuleFileNameW(nullptr, wide_path, MAX_PATH))
return 1;
WideCharToMultiByte(CP_UTF8, 0, wide_path,-1,
iniPath, MAX_PATH, nullptr, nullptr);
#else
// on unix, there is no official way to get the path of the current binary.
// instead of using the MOZILLA_FIVE_HOME hack, which doesn't scale to
// multiple applications, we will try a series of techniques:
//
// 1) use realpath() on argv[0], which works unless we're loaded from the
// PATH
// 2) manually walk through the PATH and look for ourself
// 3) give up
struct stat fileStat;
strncpy(tmpPath, argv[0], sizeof(tmpPath));
lastSlash = strrchr(tmpPath, '/');
if (lastSlash) {
*lastSlash = 0;
realpath(tmpPath, iniPath);
} else {
const char *path = getenv("PATH");
if (!path)
return 1;
char *pathdup = strdup(path);
if (!pathdup)
return 1;
bool found = false;
char *token = strtok(pathdup, ":");
while (token) {
sprintf(tmpPath, "%s/%s", token, argv[0]);
if (stat(tmpPath, &fileStat) == 0) {
found = true;
lastSlash = strrchr(tmpPath, '/');
*lastSlash = 0;
realpath(tmpPath, iniPath);
break;
}
token = strtok(nullptr, ":");
}
free (pathdup);
if (!found)
return 1;
}
lastSlash = iniPath + strlen(iniPath);
*lastSlash = '/';
#endif
#ifndef XP_UNIX
lastSlash = strrchr(iniPath, PATH_SEPARATOR_CHAR);
if (!lastSlash)
return 1;
#endif
*(++lastSlash) = '\0';
// On Linux/Win, look for XULRunner in appdir/xulrunner
snprintf(greDir, sizeof(greDir),
"%sxulrunner" XPCOM_FILE_PATH_SEPARATOR XPCOM_DLL,
iniPath);
greFound = FolderExists(greDir);
#ifdef XP_UNIX
if (greFound) {
char resolved_greDir[MAXPATHLEN] = "";
if (realpath(greDir, resolved_greDir) && *resolved_greDir) {
strncpy(greDir, resolved_greDir, MAXPATHLEN);
}
}
#endif
strncpy(lastSlash, "application.ini", sizeof(iniPath) - (lastSlash - iniPath));
#endif
// If -app parameter was passed in, it is now time to take it under
// consideration.
const char *appDataFile;
appDataFile = getenv("XUL_APP_FILE");
if (!appDataFile || !*appDataFile)
if (argc > 1 && IsArg(argv[1], "app")) {
if (argc == 2) {
Output(false, "specify APP-FILE (optional)\n");
return 1;
}
argv[1] = argv[0];
++argv;
--argc;
appDataFile = argv[1];
argv[1] = argv[0];
++argv;
--argc;
char kAppEnv[MAXPATHLEN];
snprintf(kAppEnv, MAXPATHLEN, "XUL_APP_FILE=%s", appDataFile);
if (putenv(kAppEnv))
Output(false, "Couldn't set %s.\n", kAppEnv);
char *result = (char*) calloc(sizeof(char), MAXPATHLEN);
if (NS_FAILED(GetRealPath(appDataFile, &result))) {
Output(true, "Invalid application.ini path.\n");
return 1;
}
// We have a valid application.ini path passed in to the -app parameter
// but not yet a valid greDir, so lets look for it also on the same folder
// as the stub.
if (!greFound) {
lastSlash = strrchr(iniPath, PATH_SEPARATOR_CHAR);
if (!lastSlash)
return 1;
*(++lastSlash) = '\0';
snprintf(greDir, sizeof(greDir), "%s" XPCOM_DLL, iniPath);
greFound = FolderExists(greDir);
}
// copy it back.
strcpy(iniPath, result);
}
nsINIParser parser;
rv = parser.Init(iniPath);
if (NS_FAILED(rv)) {
fprintf(stderr, "Could not read application.ini\n");
return 1;
}
if (!greFound) {
#ifdef XP_MACOSX
// The bundle can be found next to the executable, in the MacOS dir.
CFURLRef exurl = CFBundleCopyExecutableURL(appBundle);
CFURLRef absexurl = nullptr;
if (exurl) {
absexurl = CFURLCopyAbsoluteURL(exurl);
CFRelease(exurl);
}
if (absexurl) {
char tbuffer[MAXPATHLEN];
if (CFURLGetFileSystemRepresentation(absexurl, true,
(UInt8*) tbuffer,
sizeof(tbuffer)) &&
access(tbuffer, R_OK | X_OK) == 0) {
if (realpath(tbuffer, greDir)) {
greFound = true;
}
else {
greDir[0] = '\0';
}
}
CFRelease(absexurl);
}
#endif
if (!greFound) {
Output(false, "Could not find the Mozilla runtime.\n");
return 1;
}
}
rv = XPCOMGlueStartup(greDir);
if (NS_FAILED(rv)) {
if (rv == NS_ERROR_OUT_OF_MEMORY) {
char applicationName[2000] = "this application";
parser.GetString("App", "Name", applicationName, sizeof(applicationName));
Output(true, "Not enough memory available to start %s.\n",
applicationName);
} else {
Output(true, "Couldn't load XPCOM.\n");
}
return 1;
}
static const nsDynamicFunctionLoad kXULFuncs[] = {
{ "XRE_CreateAppData", (NSFuncPtr*) &XRE_CreateAppData },
{ "XRE_FreeAppData", (NSFuncPtr*) &XRE_FreeAppData },
{ "XRE_main", (NSFuncPtr*) &XRE_main },
{ nullptr, nullptr }
};
rv = XPCOMGlueLoadXULFunctions(kXULFuncs);
if (NS_FAILED(rv)) {
Output(true, "Couldn't load XRE functions.\n");
return 1;
}
NS_LogInit();
int retval;
{ // Scope COMPtr and AutoAppData
nsCOMPtr<nsIFile> iniFile;
#ifdef XP_WIN
// On Windows iniPath is UTF-8 encoded so we need to convert it.
rv = NS_NewLocalFile(NS_ConvertUTF8toUTF16(iniPath), false,
getter_AddRefs(iniFile));
#else
rv = NS_NewNativeLocalFile(nsDependentCString(iniPath), false,
getter_AddRefs(iniFile));
#endif
if (NS_FAILED(rv)) {
Output(true, "Couldn't find application.ini file.\n");
return 1;
}
AutoAppData appData(iniFile);
if (!appData) {
Output(true, "Error: couldn't parse application.ini.\n");
return 1;
}
NS_ASSERTION(appData->directory, "Failed to get app directory.");
if (!appData->xreDirectory) {
// chop "libxul.so" off the GRE path
lastSlash = strrchr(greDir, PATH_SEPARATOR_CHAR);
if (lastSlash) {
*lastSlash = '\0';
}
#ifdef XP_WIN
// same as iniPath.
NS_NewLocalFile(NS_ConvertUTF8toUTF16(greDir), false,
&appData->xreDirectory);
#else
NS_NewNativeLocalFile(nsDependentCString(greDir), false,
&appData->xreDirectory);
#endif
}
retval = XRE_main(argc, argv, appData, 0);
}
NS_LogTerm();
return retval;
}
@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="*"
name="Mozilla.XULRunner.Stub"
type="win32"
/>
<description>Mozilla XULRunner Stub</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
<ms_asmv3:trustInfo xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3">
<ms_asmv3:security>
<ms_asmv3:requestedPrivileges>
<ms_asmv3:requestedExecutionLevel level="asInvoker" uiAccess="false" />
</ms_asmv3:requestedPrivileges>
</ms_asmv3:security>
</ms_asmv3:trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
</application>
</compatibility>
</assembly>
@@ -0,0 +1,6 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
1 24 "xulrunner-stub.exe.manifest"
@@ -0,0 +1,11 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/. */
ifeq ($(OS_ARCH),WINNT)
SDK_BINARY = \
$(PROGRAM) \
$(NULL)
endif
@@ -0,0 +1,15 @@
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
if CONFIG['OS_ARCH'] == 'WINNT':
GeckoProgram('redit')
SOURCES += [
'redit.cpp',
]
for var in ('WIN32_LEAN_AND_MEAN', 'UNICODE', '_UNICODE'):
DEFINES[var] = True
if CONFIG['GNU_CC']:
WIN32_EXE_LDFLAGS += ['-municode']
+187
View File
@@ -0,0 +1,187 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
// System headers (alphabetical)
#include <fcntl.h>
#include <io.h>
#include <share.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <windows.h>
// Mozilla headers (alphabetical)
#include "mozilla/FileUtils.h" // ScopedClose
#include "mozilla/UniquePtrExtensions.h"
/*
Icon files are made up of:
IconHeader
IconDirEntry1
IconDirEntry2
...
IconDirEntryN
IconData1
IconData2
...
IconDataN
Each IconData must be added as a new RT_ICON resource to the exe. Then
an RT_GROUP_ICON resource must be added that contains an equivalent
header:
IconHeader
IconResEntry1
IconResEntry2
...
IconResEntryN
*/
#pragma pack(push, 2)
typedef struct
{
WORD Reserved;
WORD ResourceType;
WORD ImageCount;
} IconHeader;
typedef struct
{
BYTE Width;
BYTE Height;
BYTE Colors;
BYTE Reserved;
WORD Planes;
WORD BitsPerPixel;
DWORD ImageSize;
DWORD ImageOffset;
} IconDirEntry;
typedef struct
{
BYTE Width;
BYTE Height;
BYTE Colors;
BYTE Reserved;
WORD Planes;
WORD BitsPerPixel;
DWORD ImageSize;
WORD ResourceID; // This field is the one difference to above
} IconResEntry;
#pragma pack(pop)
namespace {
/**
* ScopedResourceUpdate is a RAII wrapper for Windows resource updating
*
* Instances |EndUpdateResourceW()| their handles when they go out of scope.
* They pass |TRUE| as the second argument to |EndUpdateResourceW()|, which
* causes the resource update to be aborted (changes are discarded).
*/
struct ScopedResourceUpdateTraits
{
typedef HANDLE type;
static type empty() { return nullptr; }
static void release(type handle) {
if(nullptr != handle) {
EndUpdateResourceW(handle, TRUE); // Discard changes
}
}
};
typedef mozilla::Scoped<ScopedResourceUpdateTraits> ScopedResourceUpdate;
};
#ifdef __MINGW32__
extern "C"
#endif
int
wmain(int argc, wchar_t** argv)
{
if (argc != 3) {
printf("Usage: redit <exe file> <icon file>\n");
return 1;
}
mozilla::ScopedClose file;
if (0 != _wsopen_s(&file.rwget(),
argv[2],
_O_BINARY | _O_RDONLY,
_SH_DENYWR,
_S_IREAD)
|| (-1 == file)) {
fprintf(stderr, "Unable to open icon file.\n");
return 1;
}
// Load all the data from the icon file
long filesize = _filelength(file);
auto data = MakeUniqueFallible<BYTE[]>(filesize);
if(!data) {
fprintf(stderr, "Failed to allocate memory for icon file.\n");
return 1;
}
_read(file, data.get(), filesize);
IconHeader* header = reinterpret_cast<IconHeader*>(data.get());
// Open the target library for updating
ScopedResourceUpdate updateRes(BeginUpdateResourceW(argv[1], FALSE));
if (nullptr == updateRes) {
fprintf(stderr, "Unable to open library for modification.\n");
return 1;
}
// Allocate the group resource entry
long groupSize = sizeof(IconHeader)
+ header->ImageCount * sizeof(IconResEntry);
auto group = MakeUniqueFallible<BYTE[]>(groupSize);
if(!group) {
fprintf(stderr, "Failed to allocate memory for new images.\n");
return 1;
}
memcpy(group.get(), data.get(), sizeof(IconHeader));
IconDirEntry* sourceIcon =
reinterpret_cast<IconDirEntry*>(data.get()
+ sizeof(IconHeader));
IconResEntry* targetIcon =
reinterpret_cast<IconResEntry*>(group.get()
+ sizeof(IconHeader));
for (int id = 1; id <= header->ImageCount; id++) {
// Add the individual icon
if (!UpdateResourceW(updateRes, RT_ICON, MAKEINTRESOURCE(id),
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),
data + sourceIcon->ImageOffset,
sourceIcon->ImageSize)) {
fprintf(stderr, "Unable to update resource (RT_ICON).\n");
return 1;
}
// Copy the data for this icon
// (note that the structs have different sizes)
memcpy(targetIcon, sourceIcon, sizeof(IconResEntry));
targetIcon->ResourceID = id;
sourceIcon++;
targetIcon++;
}
if (!UpdateResourceW(updateRes, RT_GROUP_ICON, L"MAINICON",
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),
group, groupSize)) {
fprintf(stderr, "Unable to update resource (RT_GROUP_ICON).\n");
return 1;
}
// Save the modifications
if(!EndUpdateResourceW(updateRes.forget(), FALSE)) {
fprintf(stderr, "Unable to write changes to library.\n");
return 1;
}
return 0;
}
-10
View File
@@ -2416,15 +2416,6 @@ if test -n "$WITH_APP_BASENAME" ; then
MOZ_APP_BASENAME="$WITH_APP_BASENAME"
fi
# Special cases where we need to AC_DEFINE something. Also a holdover for apps
# that haven't made a confvars.sh yet. Don't add new stuff here, use
# MOZ_BUILD_APP.
case "$MOZ_BUILD_APP" in
xulrunner)
AC_DEFINE(MOZ_XULRUNNER)
;;
esac
if test -n "$MOZ_B2G"; then
AC_DEFINE(MOZ_B2G)
fi
@@ -2434,7 +2425,6 @@ if test -n "$MOZ_GRAPHENE"; then
AC_DEFINE(MOZ_GRAPHENE)
fi
AC_SUBST(MOZ_XULRUNNER)
AC_SUBST(MOZ_B2G)
AC_SUBST(MOZ_B2G_VERSION)