diff options
| -rw-r--r-- | core/java/android/content/pm/ApplicationInfo.java | 8 | ||||
| -rw-r--r-- | libs/androidfw/Android.mk | 6 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/SELinuxMMAC.java | 232 | ||||
| -rw-r--r-- | tools/aapt/Android.mk | 51 | ||||
| -rw-r--r-- | tools/aidl/AST.h | 10 | ||||
| -rw-r--r-- | tools/aidl/Android.mk | 38 | ||||
| -rw-r--r-- | tools/aidl/Type.h | 9 | ||||
| -rw-r--r-- | tools/aidl/aidl.cpp | 35 | ||||
| -rw-r--r-- | tools/aidl/aidl.h | 9 | ||||
| -rw-r--r-- | tools/aidl/aidl_language.h | 6 | ||||
| -rw-r--r-- | tools/aidl/generate_java.h | 9 | ||||
| -rw-r--r-- | tools/aidl/main.cpp | 23 | ||||
| -rw-r--r-- | tools/aidl/options.h | 9 | ||||
| -rw-r--r-- | tools/aidl/options_test.cpp | 3 | ||||
| -rw-r--r-- | tools/aidl/os.h | 6 | ||||
| -rw-r--r-- | tools/aidl/search_path.h | 12 | ||||
| -rw-r--r-- | tools/split-select/Android.mk | 39 |
17 files changed, 198 insertions, 307 deletions
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java index 3b6c9bd2479c..9b1a490869cf 100644 --- a/core/java/android/content/pm/ApplicationInfo.java +++ b/core/java/android/content/pm/ApplicationInfo.java @@ -492,12 +492,14 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { /** * String retrieved from the seinfo tag found in selinux policy. This value - * is useful in setting an SELinux security context on the process as well - * as its data directory. + * can be overridden with a value set through the mac_permissions.xml policy + * construct. This value is useful in setting an SELinux security context on + * the process as well as its data directory. The String default is being used + * here to represent a catchall label when no policy matches. * * {@hide} */ - public String seinfo; + public String seinfo = "default"; /** * Paths to all shared libraries this application is linked against. This diff --git a/libs/androidfw/Android.mk b/libs/androidfw/Android.mk index 2f287000f746..f682fb8684e8 100644 --- a/libs/androidfw/Android.mk +++ b/libs/androidfw/Android.mk @@ -40,10 +40,9 @@ hostSources := $(commonSources) # For the host # ===================================================== include $(CLEAR_VARS) -LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk LOCAL_MODULE:= libandroidfw -LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_HOST_OS := darwin linux windows LOCAL_CFLAGS += -DSTATIC_ANDROIDFW_FOR_TOOLS LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code LOCAL_SRC_FILES:= $(hostSources) @@ -56,13 +55,10 @@ include $(BUILD_HOST_STATIC_LIBRARY) # ===================================================== include $(CLEAR_VARS) -LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk LOCAL_MODULE:= libandroidfw -LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES:= $(deviceSources) LOCAL_C_INCLUDES := \ - external/zlib \ system/core/include LOCAL_STATIC_LIBRARIES := libziparchive libbase LOCAL_SHARED_LIBRARIES := \ diff --git a/services/core/java/com/android/server/pm/SELinuxMMAC.java b/services/core/java/com/android/server/pm/SELinuxMMAC.java index d5176424c093..376ed02f711c 100644 --- a/services/core/java/com/android/server/pm/SELinuxMMAC.java +++ b/services/core/java/com/android/server/pm/SELinuxMMAC.java @@ -139,9 +139,6 @@ public final class SELinuxMMAC { case "signer": policies.add(readSignerOrThrow(parser)); break; - case "default": - policies.add(readDefaultOrThrow(parser)); - break; default: skip(parser); } @@ -236,45 +233,6 @@ public final class SELinuxMMAC { } /** - * Loop over a default element looking for seinfo child tags. A {@link Policy} - * instance will be created and returned in the process. All other tags encountered - * will be skipped. - * - * @param parser an XmlPullParser object representing a default element. - * @return the constructed {@link Policy} instance - * @throws IOException - * @throws XmlPullParserException - * @throws IllegalArgumentException if any of the validation checks fail while - * parsing tag values. - * @throws IllegalStateException if any of the invariants fail when constructing - * the {@link Policy} instance. - */ - private static Policy readDefaultOrThrow(XmlPullParser parser) throws IOException, - XmlPullParserException { - - parser.require(XmlPullParser.START_TAG, null, "default"); - Policy.PolicyBuilder pb = new Policy.PolicyBuilder(); - pb.setAsDefaultPolicy(); - - while (parser.next() != XmlPullParser.END_TAG) { - if (parser.getEventType() != XmlPullParser.START_TAG) { - continue; - } - - String tagName = parser.getName(); - if ("seinfo".equals(tagName)) { - String seinfo = parser.getAttributeValue(null, "value"); - pb.setGlobalSeinfoOrThrow(seinfo); - readSeinfo(parser); - } else { - skip(parser); - } - } - - return pb.build(); - } - - /** * Loop over a package element looking for seinfo child tags. If found return the * value attribute of the seinfo tag, otherwise return null. All other tags encountered * will be skipped. @@ -340,35 +298,28 @@ public final class SELinuxMMAC { /** * Applies a security label to a package based on an seinfo tag taken from a matched - * policy. All signature based policy stanzas are consulted first and, if no match - * is found, the default policy stanza is then consulted. The security label is - * attached to the ApplicationInfo instance of the package in the event that a matching - * policy was found. + * policy. All signature based policy stanzas are consulted and, if no match is + * found, the default seinfo label of 'default' (set in ApplicationInfo object) is + * used. The security label is attached to the ApplicationInfo instance of the package + * in the event that a matching policy was found. * * @param pkg object representing the package to be labeled. - * @return boolean which determines whether a non null seinfo label was assigned - * to the package. A null value simply represents that no policy matched. */ - public static boolean assignSeinfoValue(PackageParser.Package pkg) { + public static void assignSeinfoValue(PackageParser.Package pkg) { synchronized (sPolicies) { for (Policy policy : sPolicies) { String seinfo = policy.getMatchedSeinfo(pkg); if (seinfo != null) { pkg.applicationInfo.seinfo = seinfo; - if (DEBUG_POLICY_INSTALL) { - Slog.i(TAG, "package (" + pkg.packageName + ") labeled with " + - "seinfo=" + seinfo); - } - return true; + break; } } } if (DEBUG_POLICY_INSTALL) { - Slog.i(TAG, "package (" + pkg.packageName + ") doesn't match any policy; " + - "seinfo will remain null"); + Slog.i(TAG, "package (" + pkg.packageName + ") labeled with " + + "seinfo=" + pkg.applicationInfo.seinfo); } - return false; } /** @@ -509,30 +460,16 @@ public final class SELinuxMMAC { * .build(); * } * </pre> - * <p> - * The following is an example of how to use {@link Policy.PolicyBuilder} to create a - * default based Policy instance. - * </p> - * <pre> - * {@code - * Policy policy = new Policy.PolicyBuilder() - * .setAsDefaultPolicy() - * .setGlobalSeinfoOrThrow("default") - * .build(); - * } - * </pre> */ final class Policy { private final String mSeinfo; - private final boolean mDefaultStanza; private final Set<Signature> mCerts; private final Map<String, String> mPkgMap; // Use the PolicyBuilder pattern to instantiate private Policy(PolicyBuilder builder) { mSeinfo = builder.mSeinfo; - mDefaultStanza = builder.mDefaultStanza; mCerts = Collections.unmodifiableSet(builder.mCerts); mPkgMap = Collections.unmodifiableMap(builder.mPkgMap); } @@ -548,15 +485,6 @@ final class Policy { } /** - * Return whether this policy object represents a default stanza. - * - * @return A boolean indicating if this object represents a default policy stanza. - */ - public boolean isDefaultStanza() { - return mDefaultStanza; - } - - /** * Return whether this policy object contains package name mapping refinements. * * @return A boolean indicating if this object has inner package name mappings. @@ -587,10 +515,6 @@ final class Policy { @Override public String toString() { StringBuilder sb = new StringBuilder(); - if (mDefaultStanza) { - sb.append("defaultStanza=true "); - } - for (Signature cert : mCerts) { sb.append("cert=" + cert.toCharsString().substring(0, 11) + "... "); } @@ -612,22 +536,15 @@ final class Policy { * is determined using the following steps: * </p> * <ul> - * <li> If this Policy instance is defined as a default stanza: - * <ul><li>Return the global seinfo value</li></ul> + * <li> All certs used to sign the apk and all certs stored with this policy + * instance are tested for set equality. If this fails then null is returned. + * </li> + * <li> If all certs match then an appropriate inner package stanza is + * searched based on package name alone. If matched, the stored seinfo + * value for that mapping is returned. * </li> - * <li> If this Policy instance is defined as a signer stanza: - * <ul> - * <li> All certs used to sign the apk and all certs stored with this policy - * instance are tested for set equality. If this fails then null is returned. - * </li> - * <li> If all certs match then an appropriate inner package stanza is - * searched based on package name alone. If matched, the stored seinfo - * value for that mapping is returned. - * </li> - * <li> If all certs matched and no inner package stanza matches then return - * the global seinfo value. The returned value can be null in this case. - * </li> - * </ul> + * <li> If all certs matched and no inner package stanza matches then return + * the global seinfo value. The returned value can be null in this case. * </li> * </ul> * <p> @@ -639,37 +556,34 @@ final class Policy { * A value of null can also be returned if no match occured. */ public String getMatchedSeinfo(PackageParser.Package pkg) { - if (!mDefaultStanza) { - // Check for exact signature matches across all certs. - Signature[] certs = mCerts.toArray(new Signature[0]); - if (!Signature.areExactMatch(certs, pkg.mSignatures)) { - return null; - } + // Check for exact signature matches across all certs. + Signature[] certs = mCerts.toArray(new Signature[0]); + if (!Signature.areExactMatch(certs, pkg.mSignatures)) { + return null; + } - // Check for inner package name matches given that the - // signature checks already passed. - String seinfoValue = mPkgMap.get(pkg.packageName); - if (seinfoValue != null) { - return seinfoValue; - } + // Check for inner package name matches given that the + // signature checks already passed. + String seinfoValue = mPkgMap.get(pkg.packageName); + if (seinfoValue != null) { + return seinfoValue; } - // Return the global seinfo value (even if it's null). + // Return the global seinfo value. return mSeinfo; } /** * A nested builder class to create {@link Policy} instances. A {@link Policy} * class instance represents one valid policy stanza found in a mac_permissions.xml - * file. A valid policy stanza is defined to be either a signer or default stanza - * which obeys the rules outlined in external/sepolicy/mac_permissions.xml. The - * {@link #build} method ensures a set of invariants are upheld enforcing the correct - * stanza structure before returning a valid Policy object. + * file. A valid policy stanza is defined to be a signer stanza which obeys the rules + * outlined in external/sepolicy/mac_permissions.xml. The {@link #build} method + * ensures a set of invariants are upheld enforcing the correct stanza structure + * before returning a valid Policy object. */ public static final class PolicyBuilder { private String mSeinfo; - private boolean mDefaultStanza; private final Set<Signature> mCerts; private final Map<String, String> mPkgMap; @@ -679,19 +593,6 @@ final class Policy { } /** - * Sets this stanza as a default stanza. All policy stanzas are assumed to - * be signer stanzas unless this method is explicitly called. Default stanzas - * are treated differently with respect to allowable child tags, ordering and - * when and how policy decisions are enforced. - * - * @return The reference to this PolicyBuilder. - */ - public PolicyBuilder setAsDefaultPolicy() { - mDefaultStanza = true; - return this; - } - - /** * Adds a signature to the set of certs used for validation checks. The purpose * being that all contained certs will need to be matched against all certs * contained with an apk. @@ -713,11 +614,8 @@ final class Policy { /** * Set the global seinfo tag for this policy stanza. The global seinfo tag - * represents the seinfo element that is used in one of two ways depending on - * its context. When attached to a signer tag the global seinfo represents an - * assignment when there isn't a further inner package refinement in policy. - * When used with a default tag, it represents the only allowable assignment - * value. + * when attached to a signer tag represents the assignment when there isn't a + * further inner package refinement in policy. * * @param seinfo the seinfo value given as a String. * @return The reference to this PolicyBuilder. @@ -743,9 +641,7 @@ final class Policy { /** * Create a package name to seinfo value mapping. Each mapping represents * the seinfo value that will be assigned to the described package name. - * These localized mappings allow the global seinfo to be overriden. This - * mapping provides no value when used in conjunction with a default stanza; - * enforced through the {@link #build} method. + * These localized mappings allow the global seinfo to be overriden. * * @param pkgName the android package name given to the app * @param seinfo the seinfo value that will be assigned to the passed pkgName @@ -802,51 +698,25 @@ final class Policy { * about the expected structure of a policy stanza. * Those invariants are: * </p> - * <ul> - * <li> If a default stanza - * <ul> - * <li> an attached global seinfo tag must be present </li> - * <li> no signatures and no package names can be present </li> - * </ul> - * </li> - * <li> If a signer stanza - * <ul> - * <li> at least one cert must be found </li> - * <li> either a global seinfo value is present OR at least one - * inner package mapping must be present BUT not both. </li> - * </ul> - * </li> - * </ul> - * + * <ul> + * <li> at least one cert must be found </li> + * <li> either a global seinfo value is present OR at least one + * inner package mapping must be present BUT not both. </li> + * </ul> * @return an instance of {@link Policy} with the options set from this builder * @throws IllegalStateException if an invariant is violated. */ public Policy build() { Policy p = new Policy(this); - if (p.mDefaultStanza) { - if (p.mSeinfo == null) { - String err = "Missing global seinfo tag with default stanza."; - throw new IllegalStateException(err); - } - if (p.mCerts.size() != 0) { - String err = "Certs not allowed with default stanza."; - throw new IllegalStateException(err); - } - if (!p.mPkgMap.isEmpty()) { - String err = "Inner package mappings not allowed with default stanza."; - throw new IllegalStateException(err); - } - } else { - if (p.mCerts.size() == 0) { - String err = "Missing certs with signer tag. Expecting at least one."; - throw new IllegalStateException(err); - } - if (!(p.mSeinfo == null ^ p.mPkgMap.isEmpty())) { - String err = "Only seinfo tag XOR package tags are allowed within " + - "a signer stanza."; - throw new IllegalStateException(err); - } + if (p.mCerts.isEmpty()) { + String err = "Missing certs with signer tag. Expecting at least one."; + throw new IllegalStateException(err); + } + if (!(p.mSeinfo == null ^ p.mPkgMap.isEmpty())) { + String err = "Only seinfo tag XOR package tags are allowed within " + + "a signer stanza."; + throw new IllegalStateException(err); } return p; @@ -861,7 +731,6 @@ final class Policy { * <ul> * <li> signer stanzas with inner package mappings </li> * <li> signer stanzas with global seinfo tags </li> - * <li> default stanza </li> * </ul> * This comparison also checks for duplicate entries on the input selectors. Any * found duplicates will be flagged and can be checked with {@link #foundDuplicate}. @@ -878,11 +747,6 @@ final class PolicyComparator implements Comparator<Policy> { @Override public int compare(Policy p1, Policy p2) { - // Give precedence to signature stanzas over default stanzas - if (p1.isDefaultStanza() != p2.isDefaultStanza()) { - return p1.isDefaultStanza() ? 1 : -1; - } - // Give precedence to stanzas with inner package mappings if (p1.hasInnerPackages() != p2.hasInnerPackages()) { return p1.hasInnerPackages() ? -1 : 1; @@ -890,7 +754,7 @@ final class PolicyComparator implements Comparator<Policy> { // Check for duplicate entries if (p1.getSignatures().equals(p2.getSignatures())) { - // Checks if default stanza or a signer w/o inner package names + // Checks if signer w/o inner package names if (p1.hasGlobalSeinfo()) { duplicateFound = true; Slog.e(SELinuxMMAC.TAG, "Duplicate policy entry: " + p1.toString()); diff --git a/tools/aapt/Android.mk b/tools/aapt/Android.mk index 94a74c4ca987..92eb26221905 100644 --- a/tools/aapt/Android.mk +++ b/tools/aapt/Android.mk @@ -53,7 +53,6 @@ aaptTests := \ tests/Pseudolocales_test.cpp \ tests/ResourceFilter_test.cpp -aaptHostLdLibs := aaptHostStaticLibs := \ libandroidfw \ libpng \ @@ -67,17 +66,13 @@ aaptHostStaticLibs := \ aaptCFlags := -DAAPT_VERSION=\"$(BUILD_NUMBER_FROM_FILE)\" aaptCFlags += -Wall -Werror -ifeq ($(HOST_OS),linux) - aaptHostLdLibs += -lrt -ldl -lpthread -endif +aaptHostLdLibs_linux := -lrt -ldl -lpthread # Statically link libz for MinGW (Win SDK under Linux), # and dynamically link for all others. -ifneq ($(strip $(USE_MINGW)),) - aaptHostStaticLibs += libz -else - aaptHostLdLibs += -lz -endif +aaptHostStaticLibs_windows := libz +aaptHostLdLibs_linux += -lz +aaptHostLdLibs_darwin := -lz # ========================================================== @@ -86,13 +81,13 @@ endif include $(CLEAR_VARS) LOCAL_MODULE := libaapt -LOCAL_CFLAGS += -Wno-format-y2k -DSTATIC_ANDROIDFW_FOR_TOOLS $(aaptCFlags) -LOCAL_CPPFLAGS += $(aaptCppFlags) -ifeq (darwin,$(HOST_OS)) -LOCAL_CFLAGS += -D_DARWIN_UNLIMITED_STREAMS -endif +LOCAL_MODULE_HOST_OS := darwin linux windows +LOCAL_CFLAGS := -Wno-format-y2k -DSTATIC_ANDROIDFW_FOR_TOOLS $(aaptCFlags) +LOCAL_CPPFLAGS := $(aaptCppFlags) +LOCAL_CFLAGS_darwin := -D_DARWIN_UNLIMITED_STREAMS LOCAL_SRC_FILES := $(aaptSources) -LOCAL_STATIC_LIBRARIES += $(aaptHostStaticLibs) +LOCAL_STATIC_LIBRARIES := $(aaptHostStaticLibs) +LOCAL_STATIC_LIBRARIES_windows := $(aaptHostStaticLibs_windows) include $(BUILD_HOST_STATIC_LIBRARY) @@ -102,11 +97,14 @@ include $(BUILD_HOST_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := aapt -LOCAL_CFLAGS += $(aaptCFlags) -LOCAL_CPPFLAGS += $(aaptCppFlags) -LOCAL_LDLIBS += $(aaptHostLdLibs) +LOCAL_MODULE_HOST_OS := darwin linux windows +LOCAL_CFLAGS := $(aaptCFlags) +LOCAL_CPPFLAGS := $(aaptCppFlags) +LOCAL_LDLIBS_darwin := $(aaptHostLdLibs_darwin) +LOCAL_LDLIBS_linux := $(aaptHostLdLibs_linux) LOCAL_SRC_FILES := $(aaptMain) -LOCAL_STATIC_LIBRARIES += libaapt $(aaptHostStaticLibs) +LOCAL_STATIC_LIBRARIES := libaapt $(aaptHostStaticLibs) +LOCAL_STATIC_LIBRARIES_windows := $(aaptHostStaticLibs_windows) include $(BUILD_HOST_EXECUTABLE) @@ -115,15 +113,16 @@ include $(BUILD_HOST_EXECUTABLE) # Build the host tests: libaapt_tests # ========================================================== include $(CLEAR_VARS) -LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk LOCAL_MODULE := libaapt_tests -LOCAL_CFLAGS += $(aaptCFlags) -LOCAL_CPPFLAGS += $(aaptCppFlags) -LOCAL_LDLIBS += $(aaptHostLdLibs) -LOCAL_SRC_FILES += $(aaptTests) -LOCAL_C_INCLUDES += $(LOCAL_PATH) -LOCAL_STATIC_LIBRARIES += libaapt $(aaptHostStaticLibs) +LOCAL_CFLAGS := $(aaptCFlags) +LOCAL_CPPFLAGS := $(aaptCppFlags) +LOCAL_LDLIBS_darwin := $(aaptHostLdLibs_darwin) +LOCAL_LDLIBS_linux := $(aaptHostLdLibs_linux) +LOCAL_SRC_FILES := $(aaptTests) +LOCAL_C_INCLUDES := $(LOCAL_PATH) +LOCAL_STATIC_LIBRARIES := libaapt $(aaptHostStaticLibs) +LOCAL_STATIC_LIBRARIES_windows := $(aaptHostStaticLibs_windows) include $(BUILD_HOST_NATIVE_TEST) diff --git a/tools/aidl/AST.h b/tools/aidl/AST.h index ead5e7ae3439..0640b2a6a591 100644 --- a/tools/aidl/AST.h +++ b/tools/aidl/AST.h @@ -1,5 +1,5 @@ -#ifndef AIDL_AST_H -#define AIDL_AST_H +#ifndef AIDL_AST_H_ +#define AIDL_AST_H_ #include <string> #include <vector> @@ -7,7 +7,9 @@ #include <stdarg.h> #include <stdio.h> -using namespace std; +using std::set; +using std::string; +using std::vector; class Type; @@ -368,4 +370,4 @@ struct Document virtual void Write(FILE* to); }; -#endif // AIDL_AST_H +#endif // AIDL_AST_H_ diff --git a/tools/aidl/Android.mk b/tools/aidl/Android.mk index c76a04e908f8..f18b08281139 100644 --- a/tools/aidl/Android.mk +++ b/tools/aidl/Android.mk @@ -8,21 +8,33 @@ ifeq ($(TARGET_BUILD_APPS)$(filter true,$(TARGET_BUILD_PDK)),) LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) +LOCAL_CLANG_CFLAGS := -Wall -Werror +# Tragically, the code is riddled with unused parameters. +LOCAL_CLANG_CFLAGS += -Wno-unused-parameter +# yacc dumps a lot of code *just in case*. +LOCAL_CLANG_CFLAGS += -Wno-unused-function +LOCAL_CLANG_CFLAGS += -Wno-unneeded-internal-declaration +# yacc is a tool from a more civilized age. +LOCAL_CLANG_CFLAGS += -Wno-deprecated-register +# yacc also has a habit of using char* over const char*. +LOCAL_CLANG_CFLAGS += -Wno-writable-strings + LOCAL_SRC_FILES := \ - aidl_language_l.l \ - aidl_language_y.y \ - aidl.cpp \ - aidl_language.cpp \ - options.cpp \ - search_path.cpp \ - AST.cpp \ - Type.cpp \ - generate_java.cpp \ - generate_java_binder.cpp \ - generate_java_rpc.cpp - -LOCAL_CFLAGS := -g + AST.cpp \ + Type.cpp \ + aidl.cpp \ + aidl_language.cpp \ + aidl_language_l.l \ + aidl_language_y.y \ + generate_java.cpp \ + generate_java_binder.cpp \ + generate_java_rpc.cpp \ + main.cpp \ + options.cpp \ + search_path.cpp \ + LOCAL_MODULE := aidl +LOCAL_MODULE_HOST_OS := darwin linux windows include $(BUILD_HOST_EXECUTABLE) diff --git a/tools/aidl/Type.h b/tools/aidl/Type.h index ae12720142e8..cf6eaff556c4 100644 --- a/tools/aidl/Type.h +++ b/tools/aidl/Type.h @@ -1,11 +1,12 @@ -#ifndef AIDL_TYPE_H -#define AIDL_TYPE_H +#ifndef AIDL_TYPE_H_ +#define AIDL_TYPE_H_ #include "AST.h" #include <string> #include <vector> -using namespace std; +using std::string; +using std::vector; class Type { @@ -539,4 +540,4 @@ extern Expression* FALSE_VALUE; void register_base_types(); -#endif // AIDL_TYPE_H +#endif // AIDL_TYPE_H_ diff --git a/tools/aidl/aidl.cpp b/tools/aidl/aidl.cpp index 438007f527d5..d77f2b13dd97 100644 --- a/tools/aidl/aidl.cpp +++ b/tools/aidl/aidl.cpp @@ -31,7 +31,10 @@ #define MIN_USER_SET_METHOD_ID 0 #define MAX_USER_SET_METHOD_ID 16777214 -using namespace std; +using std::map; +using std::set; +using std::string; +using std::vector; static void test_document(document_item_type* d) @@ -162,11 +165,6 @@ import_import_parsed(buffer_type* statement) { } -static ParserCallbacks g_importCallbacks = { - &main_document_parsed, - &import_import_parsed -}; - // ========================================================== static int check_filename(const char* filename, const char* package, buffer_type* name) @@ -938,7 +936,7 @@ check_and_assign_method_ids(const char * filename, interface_item_type* first_it } // ========================================================== -static int +int compile_aidl(Options& options) { int err = 0, N; @@ -1068,7 +1066,7 @@ compile_aidl(Options& options) return err; } -static int +int preprocess_aidl(const Options& options) { vector<string> lines; @@ -1140,24 +1138,3 @@ preprocess_aidl(const Options& options) close(fd); return 0; } - -// ========================================================== -int -main(int argc, const char **argv) -{ - Options options; - int result = parse_options(argc, argv, &options); - if (result) { - return result; - } - - switch (options.task) - { - case COMPILE_AIDL: - return compile_aidl(options); - case PREPROCESS_AIDL: - return preprocess_aidl(options); - } - fprintf(stderr, "aidl: internal error\n"); - return 1; -} diff --git a/tools/aidl/aidl.h b/tools/aidl/aidl.h new file mode 100644 index 000000000000..98b15f36c21a --- /dev/null +++ b/tools/aidl/aidl.h @@ -0,0 +1,9 @@ +#ifndef AIDL_AIDL_H_ +#define AIDL_AIDL_H_ + +#include "options.h" + +int compile_aidl(Options& options); +int preprocess_aidl(const Options& options); + +#endif // AIDL_AIDL_H_ diff --git a/tools/aidl/aidl_language.h b/tools/aidl/aidl_language.h index de1370c086f5..1be5a9bbeb6d 100644 --- a/tools/aidl/aidl_language.h +++ b/tools/aidl/aidl_language.h @@ -1,5 +1,5 @@ -#ifndef DEVICE_TOOLS_AIDL_AIDL_LANGUAGE_H -#define DEVICE_TOOLS_AIDL_AIDL_LANGUAGE_H +#ifndef AIDL_AIDL_LANGUAGE_H_ +#define AIDL_AIDL_LANGUAGE_H_ typedef enum { @@ -169,4 +169,4 @@ void init_buffer_type(buffer_type* buf, int lineno); #endif -#endif // DEVICE_TOOLS_AIDL_AIDL_LANGUAGE_H +#endif // AIDL_AIDL_LANGUAGE_H_ diff --git a/tools/aidl/generate_java.h b/tools/aidl/generate_java.h index 4bfcfeba07c8..413a5b379c6d 100644 --- a/tools/aidl/generate_java.h +++ b/tools/aidl/generate_java.h @@ -1,12 +1,13 @@ -#ifndef GENERATE_JAVA_H -#define GENERATE_JAVA_H +#ifndef AIDL_GENERATE_JAVA_H_ +#define AIDL_GENERATE_JAVA_H_ #include "aidl_language.h" #include "AST.h" #include <string> -using namespace std; +using std::string; +using std::vector; int generate_java(const string& filename, const string& originalSrc, interface_type* iface); @@ -29,5 +30,5 @@ private: int m_index; }; -#endif // GENERATE_JAVA_H +#endif // AIDL_GENERATE_JAVA_H_ diff --git a/tools/aidl/main.cpp b/tools/aidl/main.cpp new file mode 100644 index 000000000000..7cc2198bb5df --- /dev/null +++ b/tools/aidl/main.cpp @@ -0,0 +1,23 @@ +#include "aidl.h" +#include "options.h" + +#include <stdio.h> + +int +main(int argc, const char **argv) +{ + Options options; + int result = parse_options(argc, argv, &options); + if (result) { + return result; + } + + switch (options.task) { + case COMPILE_AIDL: + return compile_aidl(options); + case PREPROCESS_AIDL: + return preprocess_aidl(options); + } + fprintf(stderr, "aidl: internal error\n"); + return 1; +} diff --git a/tools/aidl/options.h b/tools/aidl/options.h index 387e37d08732..ef4af6dc87ab 100644 --- a/tools/aidl/options.h +++ b/tools/aidl/options.h @@ -1,11 +1,12 @@ -#ifndef DEVICE_TOOLS_AIDL_H -#define DEVICE_TOOLS_AIDL_H +#ifndef AIDL_OPTIONS_H_ +#define AIDL_OPTIONS_H_ #include <string.h> #include <string> #include <vector> -using namespace std; +using std::string; +using std::vector; enum { COMPILE_AIDL, @@ -33,4 +34,4 @@ struct Options // It also prints the usage statement on failure. int parse_options(int argc, const char* const* argv, Options *options); -#endif // DEVICE_TOOLS_AIDL_H +#endif // AIDL_OPTIONS_H_ diff --git a/tools/aidl/options_test.cpp b/tools/aidl/options_test.cpp index bd106ce54f2d..7ac527dc9e4f 100644 --- a/tools/aidl/options_test.cpp +++ b/tools/aidl/options_test.cpp @@ -3,7 +3,8 @@ const bool VERBOSE = false; -using namespace std; +using std::string; +using std::vector; struct Answer { const char* argv[8]; diff --git a/tools/aidl/os.h b/tools/aidl/os.h index 79d2c35eea3d..752ed4777b0c 100644 --- a/tools/aidl/os.h +++ b/tools/aidl/os.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef _FRAMEWORKS_BASE_TOOLS_AIDL_OS_SEP_H_ -#define _FRAMEWORKS_BASE_TOOLS_AIDL_OS_SEP_H_ +#ifndef AIDL_OS_H_ +#define AIDL_OS_H_ #if defined(_WIN32) #define OS_PATH_SEPARATOR '\\' @@ -23,4 +23,4 @@ #define OS_PATH_SEPARATOR '/' #endif -#endif +#endif // AIDL_OS_H_ diff --git a/tools/aidl/search_path.h b/tools/aidl/search_path.h index 2bf94b12bbf1..de10d9b8445b 100644 --- a/tools/aidl/search_path.h +++ b/tools/aidl/search_path.h @@ -1,12 +1,15 @@ -#ifndef DEVICE_TOOLS_AIDL_SEARCH_PATH_H -#define DEVICE_TOOLS_AIDL_SEARCH_PATH_H +#ifndef AIDL_SEARCH_PATH_H_ +#define AIDL_SEARCH_PATH_H_ #include <stdio.h> #if __cplusplus #include <vector> #include <string> -using namespace std; + +using std::string; +using std::vector; + extern "C" { #endif @@ -19,5 +22,4 @@ char* find_import_file(const char* given); void set_import_paths(const vector<string>& importPaths); #endif -#endif // DEVICE_TOOLS_AIDL_SEARCH_PATH_H - +#endif // AIDL_SEARCH_PATH_H_ diff --git a/tools/split-select/Android.mk b/tools/split-select/Android.mk index d9ddf08862b3..239bed589412 100644 --- a/tools/split-select/Android.mk +++ b/tools/split-select/Android.mk @@ -43,7 +43,6 @@ cIncludes := \ external/zlib \ frameworks/base/tools -hostLdLibs := hostStaticLibs := \ libaapt \ libandroidfw \ @@ -57,17 +56,13 @@ hostStaticLibs := \ cFlags := -Wall -Werror -ifeq ($(HOST_OS),linux) - hostLdLibs += -lrt -ldl -lpthread -endif +hostLdLibs_linux := -lrt -ldl -lpthread # Statically link libz for MinGW (Win SDK under Linux), # and dynamically link for all others. -ifneq ($(strip $(USE_MINGW)),) - hostStaticLibs += libz -else - hostLdLibs += -lz -endif +hostStaticLibs_windows := libz +hostLdLibs_darwin := -lz +hostLdLibs_linux += -lz # ========================================================== @@ -75,11 +70,12 @@ endif # ========================================================== include $(CLEAR_VARS) LOCAL_MODULE := libsplit-select +LOCAL_MODULE_HOST_OS := darwin linux windows LOCAL_SRC_FILES := $(sources) -LOCAL_C_INCLUDES += $(cIncludes) -LOCAL_CFLAGS += $(cFlags) -D_DARWIN_UNLIMITED_STREAMS +LOCAL_C_INCLUDES := $(cIncludes) +LOCAL_CFLAGS := $(cFlags) -D_DARWIN_UNLIMITED_STREAMS include $(BUILD_HOST_STATIC_LIBRARY) @@ -93,10 +89,12 @@ LOCAL_MODULE_TAGS := tests LOCAL_SRC_FILES := $(testSources) -LOCAL_C_INCLUDES += $(cIncludes) -LOCAL_STATIC_LIBRARIES += libsplit-select $(hostStaticLibs) -LOCAL_LDLIBS += $(hostLdLibs) -LOCAL_CFLAGS += $(cFlags) +LOCAL_C_INCLUDES := $(cIncludes) +LOCAL_STATIC_LIBRARIES := libsplit-select $(hostStaticLibs) +LOCAL_STATIC_LIBRARIES_windows := $(hostStaticLibs_windows) +LOCAL_LDLIBS_darwin := $(hostLdLibs_darwin) +LOCAL_LDLIBS_linux := $(hostLdLibs_linux) +LOCAL_CFLAGS := $(cFlags) include $(BUILD_HOST_NATIVE_TEST) @@ -105,13 +103,16 @@ include $(BUILD_HOST_NATIVE_TEST) # ========================================================== include $(CLEAR_VARS) LOCAL_MODULE := split-select +LOCAL_MODULE_HOST_OS := darwin linux windows LOCAL_SRC_FILES := $(main) -LOCAL_C_INCLUDES += $(cIncludes) -LOCAL_STATIC_LIBRARIES += libsplit-select $(hostStaticLibs) -LOCAL_LDLIBS += $(hostLdLibs) -LOCAL_CFLAGS += $(cFlags) +LOCAL_C_INCLUDES := $(cIncludes) +LOCAL_STATIC_LIBRARIES := libsplit-select $(hostStaticLibs) +LOCAL_STATIC_LIBRARIES_windows := $(hostStaticLibs_windows) +LOCAL_LDLIBS_darwin := $(hostLdLibs_darwin) +LOCAL_LDLIBS_linux := $(hostLdLibs_linux) +LOCAL_CFLAGS := $(cFlags) include $(BUILD_HOST_EXECUTABLE) |