[KDE] Force ntfs drives to be case insensitive. How?

Hi to all,
I use KDE and I mount usb ntfs drives with the applet (no fstab configs).
I would like to configure KDE and ntfs-3g to mount ntfs drives using the mount option "windows_names" to force linux to consider that filesystem as case insensitive (as is the default under Windows XP).
Is there any config file I can use to set such an option?
Thank you,
Xwang
PS I don't know if it is the correct forum to post such a question. In case it isn't, can some moderator move the discussion to the correct forum, please?

Short Answer: No.
I did some digging and it looks like this is not possible to set in a config file.
KDE uses udisks "under the hood" to mount filesystems. In most cases, KDE just asks udisks to use its default settings. However, sometimes KDE will pass along extra mount options. For example, KDE forces udisks to use the flush option on vfat volumes as a result of this bug report (https://bugs.kde.org/show_bug.cgi?id=273792). This is all done in the source code (solid/solid/backends/udisks2/udisksstorageaccess.cpp).
UDisks has a bunch of default options, but they are also set in the source code (http://cgit.freedesktop.org/udisks/tree … lesystem.c). You could recompile with those defaults changed if you wanted to.
The KDE Solid backend for hardware has some plain text rules files in /usr/share/apps/solid/actions where you might be able to intercept KDE and insert your own program. Probably it is not worth the trouble.

Similar Messages

  • How do I move my large iTunes collection from a case-sensitive hard drive to a case-insensitive hard drive?

    I currently keep my iTunes media on an external hard drive because it takes up too much space on my machine. I recently discovered that it was formatted as case-sensitive when I bought it, and now months later I'm having issues. When attempting to back up my files on a case-insensitive hard drive, the operation failed due to conflicting file/folder names (Artist and artist are now considered the same file name and one would have to overwrite the other). I now have a large iTunes file collection that is stuck on the case-sensitive hard drive, and I want to save a backup on a case-insensitive drive. 
    Is there a way to identify all cases where multiple files/folders have the same title/album/artist but different spelling so there will be no conflicts? The folder/file names would have to be crossed referenced to highlight any cases where File/fiLe/file  would cause a problem.
    I imagine there is a way to do this using iTunes script or Automator  or a command in terminal or something rather than going through and checking/fixing all the information for thousands of songs by hand. I'm at the limits of my minimal development skills, so any help would be appreciated.

    You should be able to use either "Carbon Copy Cloner" or "SuperDuper" (free for this purpose) to copy your case-sensitive volume to an empty case-insensitive one. Make at least two such copies on different drives. One is not enough to be safe.
    If there are any name conflicts—that is, files in the same folder with names that differ only in case, such as "File" and "file"—then you will either get an error or one of the files won't be copied. You must ensure either that no such conflicts exist, or that the consequences are not important. How you do that is up to you. Unless you went out of your way to create conflicts, they probably don't exist.
    Then erase the source volume in Disk Utility as case-insensitive. This action will remove all data from the volume.
    Restore from one of your backups using the same application you used to create it, or use the "Restore" feature of Disk Utility, which will be faster. Search its built-in help for the term "duplicate" if you need instructions.

  • How do I convert a case sensitive drive to a case insensitive drive?

    I have recently purchased a MacMini Server, and installed the 2 internal hard drives in a RAID 0 configuration to obtain the speed and 1 TB capacity, but unfortunately (rather stupidly in retrospect) formatted the drive in case sensitive mode.
    On installing the operating system and multiple applications, everything seemed to work well until I tried to install Adobe Acrobat X Pro. This application refuses to install on a case sensitive formatted drive, which I now understand is a common problem.
    The question is how can I convert to a case insensitive format without reinstalling all of the software from scratch?
    I have a Time Machine backup, and the easiest thing for me would be to reformat the drive, and then restore from the Time Machine backup.
    Will this process work? Or will there be some complications and files that will not function if they were originally installed on a case sensitive drive?
    Any help is appreciated....

    iPartition can do it ( http://www.coriolis-systems.com/iPartition.php ).
    from iPartition Help:
    Make Case Sensitive/Case Insensitive
    HFS+ now supports a case sensitive format as well as the usual case insensitive format. On a case sensitive volume, the names “Readme”, “README” and “ReadMe” would all represent different files, even if they were in the same folder.
    This option allows you to non-destructively change a case sensitive volume into a case insensitive one, and vice-versa. If you are going from a case sensitive volume to a case insensitive volume, some of your files may be renamed automatically by iPartition so that they do not clash. If all of the files in the table below were in the same directory, the right hand column shows the new names iPartition would choose for them:
    Old name New name
    README.txt README.txt
    ReadMe.txt ReadMe 1.txt
    Readme.txt Readme 2.txt
    README README
    ReadMe ReadMe 1
    Readme Readme 2
    Notice that iPartition puts the number before any file extension.
    N.B. iPartition does not transform filenames with numbers on the end back into their original forms. There is no way to tell which files were renamed by the user and which were renamed by the conversion process.

  • Search case-insensitive.

    HI All ,
    i want to create program that use search from table but case-insensitive ,
    How i can do that ?
    Regards
    James
        SELECT agr_name UP TO iv_limit ROWS
        FROM ZROLE
        INTO TABLE lt_re_role
        WHERE agr_name LIKE lv_search_value.

    Hi,
    If the definition is not case sensitive, then always the data is stored in CAPS by default.
    So what u can do it, translate your string to UPPER CASE and then select.
    Place below statement just before your select.
    TRANSLATE lv_search_value TO UPPER CASE.
    SELECT agr_name UP TO iv_limit ROWS
    FROM ZROLE
    INTO TABLE lt_re_role
    WHERE agr_name LIKE lv_search_value.
    Thanks,
    Vinod.

  • Note that the search is case insensitive?

    Hi All,
    I have a autoCustomization based Query region.
    In the Search region there is a by default Note saying "Note that the search is case insensitive"
    How to remove or edit this Note?
    Thanks,
    SK

    Hi,
    Try entering your own text in simple search and advanced search instructions.
    Thanks,
    Gaurav

  • Time Machine says both of my external hard drives require reformatting to case insensitive. What do I do?

    I have been successfuly using Time Machine to back my iMac  to an external hard drive (via usb) and everything has been fine for the last year. I have been using TM to back up to a HD called Terra LaCie via usb.
    A week ago, my iMac hard drive was full--so I spulrged and bought a 6 TB external hard drive (Western Digital My Book-Thunderbolt). I set up the new Thunderbold HD to use RAID 1 (mirror) and copied most of my iMac hard drive over to the Thunderbolt HD.
    I kept my working photographs (most recent) on my iMac and felt good to know my older photographs are on my new Thunderbolt hard drive.
    For a few days, Time Machine seemed to work fine (backing up my iMac to Terra LaCie HD. I haven't been concerned with backing up the Thunderbolt drive (as I feel that mirroring is same as backing up).
    Yesterday, Time Machine indicated the lastest back-up failed (for the HD called Terra LaCie). Now, when I go into Time Machine, the dialog box indicates the following message:
    "Are you sure you want to erase the backup disk “Terra Lacie”? Erasing will destroy all information on the disk and can’t be undone.
    The disk must be erased before it can be used for Time Machine backups because a disk you are backing up is case sensitive, but the backup disk is not."
    When I open Time Machine to look at my external hard drives (I also have a third usb portable drive); two of the three drives indicate the following:
    "reformat required; case insensitive disk".
    The small, portable hard drive (that I'm also using) doesn't say it needs to be reformated (but my new Thunderbolt and my old usb HD both indicate the same message (above).
    What should I do? I just spent days transferring my photographs from my iMac to my new Thunderbolt. Should I just not use Time Machine any longer and work from my Thunderbolt drive?
    Am I to understand that my iMac suddenly become case sensitive? Sorry if this was too much information about my hard-ware set-up.
    Any help someone can provide me would be greatly appreciated. I suppose I need to understand Time Machine and perhaps my Thunderbolt better.

    Hi BDAqua,
    Bravo, you helped me solve my problem.
    The Case Sensitive Disk was the small portable hard drive that I was using termporarily.
    I just disconnected it and I started TM machine and everything seems to be working just fine.
    Thank you very much!!!!

  • How can I copy media from an HFS case-sensitive drive to an HFS case-insensitive drive without getting an error?

    About a year ago, I accidentally created a partition on my drive for my iTunes Music. On that parition, called MUSIC, I selected the filesystem to be an HFS, Journaled, case-sensitive partition. Since then, all of my music, new and old, lives on the case-sensitive MUSIC parition.
    My other partition, called BOX, is an HFS, Journaled, case-insensitive filesystem, as are my external drives I use for archiving and backing up my music.
    My dilemma: when I try to copy my music/iTunes media from the MUSIC partition to a different partition that's case-insensitive, I obviously run into errors saying that certain files can't be copied because they will overwrite others. Subsequently, I can't back up my music and iTunes media to another drive unless it has the same filesystem parameters favoring case-sensitivity. I want to move my media to a case-insenstive drive/partition.
    As the story goes, I'd like to avoid having to reformat and worry about moving my media around because I feel, in the end, I'd end up doing more harm then good in my pursuit to fix this issue.
    My question: is there some way I can detect which files are conflicting with each other, and then manually rename them? My music library runs about 16,000 songs deep, but I'd still feel saved even if I had to go through and manually rename all of the music files so they don't conflict with each other in order to get them on to a case-insensitive drive. Perhaps there's an AppleScript someone knows about that I could execute in my MUSIC partition to see which files/directories are causing my problems? In other words, I'm thinking there could be a way to detect the same file/directory names that are only different soley because of their case.
    Any help, suggestions, or solutions are welcome. Thank you all for your time in helping me solve this!
    And have a Happy Thanksgiving

    How do I restore a case-sensitive,...: Apple Support Communities

  • How to make MySQL JDBC Driver case-insensitive

    Hi,
    I'm porting a jdbc application from oracle to mysql. One of the problem is that oracle's column names are case insensitive, whereas CODE in mySql is different from code (see example posted below).
    I know that I can change the source code to use always the same case. But is there a way to make the mysql jdbc driver case-insensitive ?
    import java.sql.*;
    /* getString(String) is case sensitive for org.gjt.mm.mysql.Driver driver */
    mysql> describe currency;
    +-----------------+----------------+------+-----+----------------+-------+
    | Field           | Type           | Null | Key | Default        | Extra |
    +-----------------+----------------+------+-----+----------------+-------+
    | code            | char(3)        |      | PRI |                |       |
    | name            | varchar(40)    |      | UNI |                |       |
    | shortCode       | char(2)        | YES  | MUL | NULL           |       |
    | exchangeRate    | decimal(19,12) |      |     | 0.000000000000 |       |
    | changed         | decimal(1,0)   |      |     | 0              |       |
    | markedFlag      | decimal(1,0)   |      |     | 0              |       |
    | updateTimestamp | timestamp(14)  | YES  |     | NULL           |       |
    +-----------------+----------------+------+-----+----------------+-------+
    7 rows in set (0.00 sec)
    getObject(1)=EUR
    Trying code
    getObject("code")=EUR
    Trying Code
    java.sql.SQLException: Column 'Code' not found.
         at org.gjt.mm.mysql.ResultSet.findColumn(ResultSet.java:1213)
         at org.gjt.mm.mysql.ResultSet.getObject(ResultSet.java:1188)
         at mySqlDemo.main(mySqlDemo.java:61)
    getObject(1)=USD
    Trying code
    getObject("code")=USD
    Trying Code
    java.sql.SQLException: Column 'Code' not found.
         at org.gjt.mm.mysql.ResultSet.findColumn(ResultSet.java:1213)
         at org.gjt.mm.mysql.ResultSet.getObject(ResultSet.java:1188)
         at mySqlDemo.main(mySqlDemo.java:61)
    public class mySqlDemo {
         public final static void main(String[] args) {
              try {
                   /*== database constants ==*/
                   String DBHOST = "localhost";
                   String DBNAME = "test";
                   String DBUSER = "test";
                   String DBPASS = "";
                   String DBDRIVER = "org.gjt.mm.mysql.Driver";
                   /*== setup database driver and connect ==*/
                   Class.forName(DBDRIVER).newInstance();
                   String conurl = "jdbc:mysql://"+DBHOST+"/"+DBNAME;
                   Connection db = DriverManager.getConnection(conurl,DBUSER,DBPASS);
                   /*== create sql query and execute ==*/
                   //String sql = "select code from currency";
                   String sql = "select Currency.code, Currency.name, Currency.shortCode, Currency.exchangeRate, Currency.changed, Currency.markedFlag, Currency.updateTimestamp from Currency order by code";
                   Statement stmnt = db.createStatement();
                   ResultSet rs = stmnt.executeQuery(sql);
                   /*== display results ==*/
                   while(rs.next()) {
                          System.out.println("getObject(1)=" + rs.getObject(1));
                          // works, because "Currency.code" has been selected
                          System.out.println("Trying code");
                          try {
                                 System.out.println("getObject(\"code\")=" + rs.getObject("code"));
                          } catch(SQLException ex) {
                               ex.printStackTrace();
                         // case sensitive !
                          // does not work, because "Currency.code" has been selected
                          // "code" != "Code"
                          System.out.println("Trying Code");
                          try {
                                 System.out.println("getObject(\"Code\")=" + rs.getObject("Code"));
                          } catch(SQLException ex) {
                               ex.printStackTrace();
              } catch(Throwable t) {
                   t.printStackTrace();
    }

    One of the problem is that oracle's column names are
    case insensitive, whereas CODE in mySql is different from code (see example posted below).I doubt that.
    SQL standards are rather specific that columns names are case insensitive unless quoted identifiers are used. And presumably you are doing that.
    What you are seeing is a difference in drivers not databases.
    I would guess that the only way to change the behaviour is to modify your code. If you uppercase everything it should work. Or you could use positional rather than named column extraction.

  • Conversion from a case-sensitive to case-insensitive disk configuration.

    Being an old Unix user, I configured my disks to be case-sensitive. I've discovered that patches and updates to some applications fail due to changes in the case used for file names.
    Is there a painless way to convert a case-sensitive file system to one that is case-insensitive?

    I don't have current version of SoftRAID 4.0 but I thought that was one of its features, just as it can change the block size for arrays from 16-32-64-128k etc on the fly.
    I haven't used it, but iPartition claims to be able to convert in-place between case-sentitive and case-insensitive HFS+ formats.
    The trouble is, even then, a restore may not work properly.
    http://www.dslreports.com/forum/r19614460-Convert-hard-drive-to-HFS-that-is-not- case-sensitive

  • SELECT INTO doing case insensitive query?

    Hi all,
    I'm having a problem with a query acting as if it is case-insensitive when I do a "SELECT table.x INTO variable ...". If I do the same query, without the "INTO variable", I get one result, as expected.
    The query is similar to the following:
    SELECT table_id INTO variable FROM table WHERE table.varchar2column = 'name' AND table.integercolumn = int_variable;
    There is a unique constraint forcing the varchar2column / integercolumn values to be unique.
    If the varchar2column has two entries that differ only in case, a regular select statement returns one result. However, in the stored procedure using the INTO, I get the following error message:
    ORA-01422: exact fetch returns more than requested number of rows
    It does not get that if I remove the entry that differs only in letter-case. This is Oracle 10.2.0.1.0, if that matters.
    I need this query to be case sensitive. I'm not a DB expert, I'm just a developer trying to fix a problem. I attempted to run "ALTER session SET nls_sort = binary" in the stored procedure, but I guess I can't do that...
    Any suggestions would be appreciated.

    791307 wrote:
    SELECT table_id INTO variable FROM table WHERE table.varchar2column = 'name' AND table.integercolumn = int_variable;
    ...When you say, "...AND table.integercolumn = int_variable;" What is the name of int_variable? Does that name match some column name? Could you post the table creats and a complete sample PL/SQL block with your issue?
    One of the things that gets me every once in awhile is having a variable name that matches a column name. In that case the column name is used inside the select statement, not the variable. To avoid that issue, I use v_ for all my variables. (Others have different standard prefixes.)
    I only point this out, because it might be given results that look case insensitive on the varchar2 column, but is really an issue with the integer column matching to a variable:
    SQL> drop table T;
    Table dropped.
    SQL> create table T (id number constraint T_PK primary key
      2      , Varchar2Data varchar2(20)
      3      , NumberData number(38)
      4      , constraint T_UK1 unique (Varchar2Data, NumberData)
      5  );
    Table created.
    SQL> insert into T values (1, 'STRING', 100);
    1 row created.
    SQL> insert into T values (2, 'string', 200);
    1 row created.
    SQL> insert into T values (3, 'STRING', 300);
    1 row created.
    SQL> select * from T where Varchar2Data = 'STRING' and NumberData = 100;
            ID VARCHAR2DATA         NUMBERDATA
             1 STRING                      100
    SQL> declare
      2      NumberData number(38);
      3      Id Number;
      4  begin
      5      NumberData := 100;
      6      select Id into Id
      7      from T
      8      where T.Varchar2Data = 'STRING'
      9      and T.NumberData = NumberData;
    10      DBMS_OUTPUT.PUT_LINE(Id);
    11  end;
    12  /
    declare
    ERROR at line 1:
    ORA-01422: exact fetch returns more than requested number of rows
    ORA-06512: at line 6
    SQL> declare
      2      v_NumberData number(38);
      3      v_Id Number;
      4  begin
      5      v_NumberData := 100;
      6      select Id into v_Id
      7      from T
      8      where T.Varchar2Data = 'STRING'
      9      and T.NumberData = v_NumberData;
    10      DBMS_OUTPUT.PUT_LINE(v_Id);
    11  end;
    12  /
    1
    PL/SQL procedure successfully completed.
    SQL>

  • HAL doesn't let regular users browse NTFS drives

    If I plug a USB hard drive into my computer that is using an NTFS filesystem, I get a dialog box saying "Failed to open directory "disk-1".  Permission denied."  Most of the time with flash drives and the like, I plug it in and it just works (wowee!).  But in this case, it's getting its unix on.  I haven't messed with the fstab if that's what I have to dink with.  What can I do to allow a regular user read and write to NTFS drives via HAL?

    I use both the policy rule and the mount.ntfs-3g workaround, as I have many files with greek characters on my removable NTFS volumes- and without the workaround they are invisible (despite the fact that the system default is el_GR.UTF8).
    I didn't need to apply the "ln -s /sbin/mount.ntfs-3g /sbin/mount.ntfs" workaround, as I had no issues (using a fairly standard kernel26).

  • GetOrdinal of AseDataReader Class is not doing case-insensitive search

    hi,
    I am working on 12.5.4 version of sybase ASE.I am using 'Sybase.AdoNet2.AseClient.dll' to connect with database. I am using GetOrdinal method of ASEDatareader class (that as per documentation performs a case-sensitive lookup first. If it fails , a second search that is case-insensitive occurs) but in my case it is not performing case-insensitive search. I am attaching the document for your reference.
    http://infocenter.sybase.com/help/index.jsp?topic=/com.infocenter.dc20066.1570100/doc/html/san1364409576274.html
    Thanks,
    Raman

    Hi Monica,
    Another thing you want to make sure is on your ASE that the oledb/adonet MDA scripts are up to snuff. Some of our fixes in the driver are in this.
    If you login into the ASE and get the output of sp_version.
    You should get something like this:
    OLEDB MDA Scripts
             15.7.0.1250.1013/Wed Feb 19 UTC 00:28:47 2014
    The ado.net driver and the older oledb driver use some specific MDA scripts on the ASE.
    Read the coverletter of the SDK (Software Developers Kit for ASE). It explains how to update the MDA scripts. They are on the client side $sybase\ADONET\sp.
    So where you downloaded the SDK you want to click Info then look for the README.
    This is all the SDKs:
    * Updating the metadata stored procedures required by ODBC, OLE DB and
      jConnect Drivers on Adaptive Server Enterprise
      Certain new features and bug fixes in ODBC, OLE DB and jConnect drivers
      require you to modify the metadata stored procedures in Adaptive Server.
      These stored procedures may not be up-to-date on your host ASE server due
      to various reasons.
      If the metadata stored procedures are outdated, you may not be able to use
      some of the fixes that are implemented in this SP/ESD, so you will need to
      manually install the updated metadata stored procedures.
      To update the metadata stored procedures in Adaptive Server, first determine
      the version of the meta-data scripts installed on the ASE. To do so, execute
      the following command:
      sp_version
      go
      The version number of the ODBC, OLE DB and jConnect meta-data scripts will
      be displayed.
      Review the version number column and compare it against the version of the 
      driver being used.
      If the metadata scripts are outdated, the version installed will be older
      than the driver build number or you will encounter one of the following:
      - stored procedure sp_version is not found
      - the stored procedure output does not print a row for the driver
      The updated scripts are included with the drivers and can be installed as
      follows:
      For ODBC & OLE DB:
      - Go the "sp" directory under the ODBC/OLE DB installation directory
      - Execute the install_odbc_sprocs script for the ODBC Driver and
      install_oledb_sprocs script for OLE DB Provider.
      Syntax for using the script is:
            install_[odbc/olebd]_sprocs <ServerName> <username> [<password>]
             where <ServerName> is the name of the Adaptive Server
                 <username> is the username to connect to the server
                 [<password>] is the password the username
                 (don’t supply this for null password)
      For jConnect:
      - Go to the "sp" directory under the jConnect installation directory. Based
      on your host ASE server version, choose the appropriate SQL script.
      - Use isql or another tool of your choice to execute the selected script.
      This will install the current meta-data stored procedures.
    Thanks,
    Dawn

  • How to search case insensitive ?

    Is there any way to search case insensitive ?
    Because we use Remedy application, we can't change query like to use 'UPPER' or 'LOWER' functions.
    For example,
    SQL> desc test1
    Name Null? Type
    A VARCHAR2(20)
    SQL> select * from test1;
    A
    TEST
    test
    SQL> select * from test1 where A like 'TE%';
    then I expect result as following:
    A
    TEST
    test
    Please advise..

    If you can't change the query or schema then I'm afraid you are pretty much stuck. You can use a function based index if you stop using a wildcard (% forces a full-table scan and, therefore, does not use the index). If you had more control over the app, the context index would be good. Storing the data in all uppercase is another solution. All of the solutions are controled by the app vendor though.
    My advice - log an enhancement with Remedy...suggest using a context index on the column in question.

  • [SOLVED] Case-insensitive filesystem issue

    Dear fellas,
    I am trying to compile an AOSP rom using the following configuration:
    - Arch Linux x64
    - Latest Kernel 3.12.8-1-ARCH
    - BTRFS filesystem
    I got the following error:
    build/core/main.mk:118: You are building on a case-insensitive filesystem.
    build/core/main.mk:119: Please move your source tree to a case-sensitive filesystem.
    build/core/main.mk:120: ************************************************************
    build/core/main.mk:121: *** Case-insensitive filesystems not supported.  Stop.
    So far, I was compiling with no issue. It just starts a couple days ago. I suspect that maybe is due to some kernel change.
    Anyone already face this issue?
    Appreciate any clue.
    ========================SOLVED==========================
    Here is the solution presented by korn36 that did the magic for the main issue:
    Remove this from build/core/main.mk, then compile:
    ifneq ($(HOST_OS),windows)
    ifneq ($(HOST_OS)-$(HOST_ARCH),darwin-ppc)
    # check for a case sensitive file system
    ifneq (a,$(shell mkdir -p $(OUT_DIR) ; \
                    echo a > $(OUT_DIR)/casecheck.txt; \
                        echo B > $(OUT_DIR)/CaseCheck.txt; \
                    cat $(OUT_DIR)/casecheck.txt))
    $(warning ************************************************************)
    $(warning You are building on a case-insensitive filesystem.)
    $(warning Please move your source tree to a case-sensitive filesystem.)
    $(warning ************************************************************)
    $(error Case-insensitive filesystems not supported)
    endif
    endif
    endif
    It will disable the case-sensitivity check.
    ================edited====================
    Again thanks to korn36 for the elegant python switch solution:
    find . -name "*.py" -exec sed -i 's/\(bin\/env\ python$\|bin\/python$\)/bin\/env\ python2/g' {} \;
    Thanks to Kacper for heads me up to a typo I made.
    ===============edited=====================
    or still other script provided by Scimmia (Thanks Scimmia)
    or simply
    find . -name "*.py" -exec sed -i 's/env python$/&2/' {} \;
    Just FYI both scripts works flawlessly!
    Best Regards
    Erick
    Last edited by erickwill (2014-01-26 15:37:56)

    Here you go:
    # Only use ANDROID_BUILD_SHELL to wrap around bash.
    # DO NOT use other shells such as zsh.
    ifdef ANDROID_BUILD_SHELL
    SHELL := $(ANDROID_BUILD_SHELL)
    else
    # Use bash, not whatever shell somebody has installed as /bin/sh
    # This is repeated in config.mk, since envsetup.sh runs that file
    # directly.
    SHELL := /bin/bash
    endif
    # this turns off the suffix rules built into make
    .SUFFIXES:
    # this turns off the RCS / SCCS implicit rules of GNU Make
    % : RCS/%,v
    % : RCS/%
    % : %,v
    % : s.%
    % : SCCS/s.%
    # If a rule fails, delete $@.
    .DELETE_ON_ERROR:
    # Figure out where we are.
    #TOP := $(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))
    #TOP := $(patsubst %/,%,$(TOP))
    # TOPDIR is the normal variable you should use, because
    # if we are executing relative to the current directory
    # it can be "", whereas TOP must be "." which causes
    # pattern matching probles when make strips off the
    # trailing "./" from paths in various places.
    #ifeq ($(TOP),.)
    #TOPDIR :=
    #else
    #TOPDIR := $(TOP)/
    #endif
    # Check for broken versions of make.
    # (Allow any version under Cygwin since we don't actually build the platform there.)
    ifeq (,$(findstring CYGWIN,$(shell uname -sm)))
    ifneq (1,$(strip $(shell expr $(MAKE_VERSION) \>= 3.81)))
    $(warning ********************************************************************************)
    $(warning * You are using version $(MAKE_VERSION) of make.)
    $(warning * Android can only be built by versions 3.81 and higher.)
    $(warning * see https://source.android.com/source/download.html)
    $(warning ********************************************************************************)
    $(error stopping)
    endif
    endif
    # Absolute path of the present working direcotry.
    # This overrides the shell variable $PWD, which does not necessarily points to
    # the top of the source tree, for example when "make -C" is used in m/mm/mmm.
    PWD := $(shell pwd)
    TOP := .
    TOPDIR :=
    BUILD_SYSTEM := $(TOPDIR)build/core
    # This is the default target. It must be the first declared target.
    .PHONY: droid
    DEFAULT_GOAL := droid
    $(DEFAULT_GOAL):
    # Used to force goals to build. Only use for conditionally defined goals.
    .PHONY: FORCE
    FORCE:
    # These goals don't need to collect and include Android.mks/CleanSpec.mks
    # in the source tree.
    dont_bother_goals := clean clobber dataclean installclean \
    help out \
    snod systemimage-nodeps \
    stnod systemtarball-nodeps \
    userdataimage-nodeps userdatatarball-nodeps \
    cacheimage-nodeps \
    vendorimage-nodeps \
    ramdisk-nodeps \
    bootimage-nodeps
    ifneq ($(filter $(dont_bother_goals), $(MAKECMDGOALS)),)
    dont_bother := true
    endif
    # Targets that provide quick help on the build system.
    include $(BUILD_SYSTEM)/help.mk
    # Set up various standard variables based on configuration
    # and host information.
    include $(BUILD_SYSTEM)/config.mk
    # This allows us to force a clean build - included after the config.mk
    # environment setup is done, but before we generate any dependencies. This
    # file does the rm -rf inline so the deps which are all done below will
    # be generated correctly
    include $(BUILD_SYSTEM)/cleanbuild.mk
    # Include the google-specific config
    -include vendor/google/build/config.mk
    VERSION_CHECK_SEQUENCE_NUMBER := 3
    -include $(OUT_DIR)/versions_checked.mk
    ifneq ($(VERSION_CHECK_SEQUENCE_NUMBER),$(VERSIONS_CHECKED))
    $(info Checking build tools versions...)
    ifneq ($(HOST_OS),windows)
    ifneq ($(HOST_OS)-$(HOST_ARCH),darwin-ppc)
    # check for a case sensitive file system
    ifneq (a,$(shell mkdir -p $(OUT_DIR) ; \
    echo a > $(OUT_DIR)/casecheck.txt; \
    echo B > $(OUT_DIR)/CaseCheck.txt; \
    cat $(OUT_DIR)/casecheck.txt))
    $(warning ************************************************************)
    $(warning You are building on a case-insensitive filesystem.)
    $(warning Please move your source tree to a case-sensitive filesystem.)
    $(warning ************************************************************)
    $(error Case-insensitive filesystems not supported)
    endif
    endif
    endif
    # Make sure that there are no spaces in the absolute path; the
    # build system can't deal with them.
    ifneq ($(words $(shell pwd)),1)
    $(warning ************************************************************)
    $(warning You are building in a directory whose absolute path contains)
    $(warning a space character:)
    $(warning $(space))
    $(warning "$(shell pwd)")
    $(warning $(space))
    $(warning Please move your source tree to a path that does not contain)
    $(warning any spaces.)
    $(warning ************************************************************)
    $(error Directory names containing spaces not supported)
    endif
    # Check for the corrent jdk
    ifneq ($(shell java -version 2>&1 | grep -i openjdk),)
    $(info ************************************************************)
    $(info You are attempting to build with an unsupported JDK.)
    $(info $(space))
    $(info You use OpenJDK but only Sun/Oracle JDK is supported.)
    $(info Please follow the machine setup instructions at)
    $(info $(space)$(space)$(space)$(space)https://source.android.com/source/download.html)
    $(info $(space))
    $(info Continue at your own peril!)
    $(info ************************************************************)
    endif
    # Check for the correct version of java
    java_version := $(shell java -version 2>&1 | head -n 1 | grep '^java .*[ "]1\.[67][\. "$$]')
    ifeq ($(strip $(java_version)),)
    $(info ************************************************************)
    $(info You are attempting to build with the incorrect version)
    $(info of java.)
    $(info $(space))
    $(info Your version is: $(shell java -version 2>&1 | head -n 1).)
    $(info The correct version is: Java SE 1.6 or 1.7.)
    $(info $(space))
    $(info Please follow the machine setup instructions at)
    $(info $(space)$(space)$(space)$(space)https://source.android.com/source/download.html)
    $(info ************************************************************)
    $(error stop)
    endif
    # Check for the correct version of javac
    javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1\.[67][\. "$$]')
    ifeq ($(strip $(javac_version)),)
    $(info ************************************************************)
    $(info You are attempting to build with the incorrect version)
    $(info of javac.)
    $(info $(space))
    $(info Your version is: $(shell javac -version 2>&1 | head -n 1).)
    $(info The correct version is: 1.6 or 1.7.)
    $(info $(space))
    $(info Please follow the machine setup instructions at)
    $(info $(space)$(space)$(space)$(space)https://source.android.com/source/download.html)
    $(info ************************************************************)
    $(error stop)
    endif
    ifndef BUILD_EMULATOR
    ifeq (darwin,$(HOST_OS))
    GCC_REALPATH = $(realpath $(shell which $(HOST_CC)))
    ifneq ($(findstring llvm-gcc,$(GCC_REALPATH)),)
    # Using LLVM GCC results in a non functional emulator due to it
    # not honouring global register variables
    $(warning ****************************************)
    $(warning * gcc is linked to llvm-gcc which will *)
    $(warning * not create a useable emulator. *)
    $(warning ****************************************)
    BUILD_EMULATOR := false
    else
    BUILD_EMULATOR := true
    endif
    else # HOST_OS is not darwin
    BUILD_EMULATOR := true
    endif # HOST_OS is darwin
    endif
    $(shell echo 'VERSIONS_CHECKED := $(VERSION_CHECK_SEQUENCE_NUMBER)' \
    > $(OUT_DIR)/versions_checked.mk)
    $(shell echo 'BUILD_EMULATOR ?= $(BUILD_EMULATOR)' \
    >> $(OUT_DIR)/versions_checked.mk)
    endif
    # These are the modifier targets that don't do anything themselves, but
    # change the behavior of the build.
    # (must be defined before including definitions.make)
    INTERNAL_MODIFIER_TARGETS := showcommands all incrementaljavac
    .PHONY: incrementaljavac
    incrementaljavac: ;
    # WARNING:
    # ENABLE_INCREMENTALJAVAC should NOT be enabled by default, because change of
    # a Java source file won't trigger rebuild of its dependent Java files.
    # You can only enable it by adding "incrementaljavac" to your make command line.
    # You are responsible for the correctness of the incremental build.
    # This may decrease incremental build time dramatically for large Java libraries,
    # such as core.jar, framework.jar, etc.
    ENABLE_INCREMENTALJAVAC :=
    ifneq (,$(filter incrementaljavac, $(MAKECMDGOALS)))
    ENABLE_INCREMENTALJAVAC := true
    MAKECMDGOALS := $(filter-out incrementaljavac, $(MAKECMDGOALS))
    endif
    # EMMA_INSTRUMENT_STATIC merges the static emma library to each emma-enabled module.
    ifeq (true,$(EMMA_INSTRUMENT_STATIC))
    EMMA_INSTRUMENT := true
    endif
    # Bring in standard build system definitions.
    include $(BUILD_SYSTEM)/definitions.mk
    # Bring in Qualcomm helper macros
    include $(BUILD_SYSTEM)/qcom_utils.mk
    # Bring in dex_preopt.mk
    include $(BUILD_SYSTEM)/dex_preopt.mk
    ifneq ($(filter user userdebug eng,$(MAKECMDGOALS)),)
    $(info ***************************************************************)
    $(info ***************************************************************)
    $(info Do not pass '$(filter user userdebug eng,$(MAKECMDGOALS))' on \
    the make command line.)
    $(info Set TARGET_BUILD_VARIANT in buildspec.mk, or use lunch or)
    $(info choosecombo.)
    $(info ***************************************************************)
    $(info ***************************************************************)
    $(error stopping)
    endif
    ifneq ($(filter-out $(INTERNAL_VALID_VARIANTS),$(TARGET_BUILD_VARIANT)),)
    $(info ***************************************************************)
    $(info ***************************************************************)
    $(info Invalid variant: $(TARGET_BUILD_VARIANT)
    $(info Valid values are: $(INTERNAL_VALID_VARIANTS)
    $(info ***************************************************************)
    $(info ***************************************************************)
    $(error stopping)
    endif
    # Variable to check java support level inside PDK build.
    # Not necessary if the components is not in PDK.
    # not defined : not supported
    # "sdk" : sdk API only
    # "platform" : platform API supproted
    TARGET_BUILD_JAVA_SUPPORT_LEVEL := platform
    # The pdk (Platform Development Kit) build
    include build/core/pdk_config.mk
    ### In this section we set up the things that are different
    ### between the build variants
    is_sdk_build :=
    ifneq ($(filter sdk win_sdk sdk_addon,$(MAKECMDGOALS)),)
    is_sdk_build := true
    endif
    ## user/userdebug ##
    user_variant := $(filter user userdebug,$(TARGET_BUILD_VARIANT))
    enable_target_debugging := true
    tags_to_install :=
    ifneq (,$(user_variant))
    # Target is secure in user builds.
    ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1
    ifeq ($(user_variant),userdebug)
    # Pick up some extra useful tools
    tags_to_install += debug
    # Enable Dalvik lock contention logging for userdebug builds.
    ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.lockprof.threshold=500
    else
    # Disable debugging in plain user builds.
    enable_target_debugging :=
    endif
    # Turn on Dalvik preoptimization for user builds, but only if not
    # explicitly disabled and the build is running on Linux (since host
    # Dalvik isn't built for non-Linux hosts).
    ifneq (true,$(DISABLE_DEXPREOPT))
    ifeq ($(user_variant),user)
    ifeq ($(HOST_OS),linux)
    WITH_DEXPREOPT := true
    endif
    endif
    endif
    # Disallow mock locations by default for user builds
    ADDITIONAL_DEFAULT_PROPERTIES += ro.allow.mock.location=0
    else # !user_variant
    # Turn on checkjni for non-user builds.
    ADDITIONAL_BUILD_PROPERTIES += ro.kernel.android.checkjni=1
    # Set device insecure for non-user builds.
    ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=0
    # Allow mock locations by default for non user builds
    ADDITIONAL_DEFAULT_PROPERTIES += ro.allow.mock.location=1
    endif # !user_variant
    ifeq (true,$(strip $(enable_target_debugging)))
    # Target is more debuggable and adbd is on by default
    ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1
    # Include the debugging/testing OTA keys in this build.
    INCLUDE_TEST_OTA_KEYS := true
    else # !enable_target_debugging
    # Target is less debuggable and adbd is off by default
    ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=0
    endif # !enable_target_debugging
    ## eng ##
    ifeq ($(TARGET_BUILD_VARIANT),eng)
    tags_to_install := debug eng
    ifneq ($(filter ro.setupwizard.mode=ENABLED, $(call collapse-pairs, $(ADDITIONAL_BUILD_PROPERTIES))),)
    # Don't require the setup wizard on eng builds
    ADDITIONAL_BUILD_PROPERTIES := $(filter-out ro.setupwizard.mode=%,\
    $(call collapse-pairs, $(ADDITIONAL_BUILD_PROPERTIES))) \
    ro.setupwizard.mode=OPTIONAL
    endif
    endif
    ## sdk ##
    ifdef is_sdk_build
    # Detect if we want to build a repository for the SDK
    sdk_repo_goal := $(strip $(filter sdk_repo,$(MAKECMDGOALS)))
    MAKECMDGOALS := $(strip $(filter-out sdk_repo,$(MAKECMDGOALS)))
    ifneq ($(words $(filter-out $(INTERNAL_MODIFIER_TARGETS) checkbuild,$(MAKECMDGOALS))),1)
    $(error The 'sdk' target may not be specified with any other targets)
    endif
    # TODO: this should be eng I think. Since the sdk is built from the eng
    # variant.
    tags_to_install := debug eng
    ADDITIONAL_BUILD_PROPERTIES += xmpp.auto-presence=true
    ADDITIONAL_BUILD_PROPERTIES += ro.config.nocheckin=yes
    else # !sdk
    endif
    BUILD_WITHOUT_PV := true
    ## precise GC ##
    ifneq ($(filter dalvik.gc.type-precise,$(PRODUCT_TAGS)),)
    # Enabling type-precise GC results in larger optimized DEX files. The
    # additional storage requirements for ".odex" files can cause /system
    # to overflow on some devices, so this is configured separately for
    # each product.
    ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.dexopt-flags=m=y
    endif
    ADDITIONAL_BUILD_PROPERTIES += net.bt.name=Android
    # enable vm tracing in files for now to help track
    # the cause of ANRs in the content process
    ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.stack-trace-file=/data/anr/traces.txt
    # Define a function that, given a list of module tags, returns
    # non-empty if that module should be installed in /system.
    # For most goals, anything not tagged with the "tests" tag should
    # be installed in /system.
    define should-install-to-system
    $(if $(filter tests,$(1)),,true)
    endef
    ifdef is_sdk_build
    # For the sdk goal, anything with the "samples" tag should be
    # installed in /data even if that module also has "eng"/"debug"/"user".
    define should-install-to-system
    $(if $(filter samples tests,$(1)),,true)
    endef
    endif
    # If they only used the modifier goals (showcommands, etc), we'll actually
    # build the default target.
    ifeq ($(filter-out $(INTERNAL_MODIFIER_TARGETS),$(MAKECMDGOALS)),)
    .PHONY: $(INTERNAL_MODIFIER_TARGETS)
    $(INTERNAL_MODIFIER_TARGETS): $(DEFAULT_GOAL)
    endif
    # Bring in all modules that need to be built.
    ifeq ($(HOST_OS)-$(HOST_ARCH),darwin-ppc)
    SDK_ONLY := true
    $(info Building the SDK under darwin-ppc is actually obsolete and unsupported.)
    $(error stop)
    endif
    ifeq ($(HOST_OS),windows)
    SDK_ONLY := true
    endif
    ifeq ($(SDK_ONLY),true)
    include $(TOPDIR)sdk/build/windows_sdk_whitelist.mk
    include $(TOPDIR)development/build/windows_sdk_whitelist.mk
    # Exclude tools/acp when cross-compiling windows under linux
    ifeq ($(findstring Linux,$(UNAME)),)
    subdirs += build/tools/acp
    endif
    else # !SDK_ONLY
    # Typical build; include any Android.mk files we can find.
    subdirs := $(TOP)
    FULL_BUILD := true
    endif # !SDK_ONLY
    # Before we go and include all of the module makefiles, stash away
    # the PRODUCT_* values so that later we can verify they are not modified.
    stash_product_vars:=true
    ifeq ($(stash_product_vars),true)
    $(call stash-product-vars, __STASHED)
    endif
    ifneq ($(ONE_SHOT_MAKEFILE),)
    # We've probably been invoked by the "mm" shell function
    # with a subdirectory's makefile.
    include $(ONE_SHOT_MAKEFILE)
    # Change CUSTOM_MODULES to include only modules that were
    # defined by this makefile; this will install all of those
    # modules as a side-effect. Do this after including ONE_SHOT_MAKEFILE
    # so that the modules will be installed in the same place they
    # would have been with a normal make.
    CUSTOM_MODULES := $(sort $(call get-tagged-modules,$(ALL_MODULE_TAGS)))
    FULL_BUILD :=
    # Stub out the notice targets, which probably aren't defined
    # when using ONE_SHOT_MAKEFILE.
    NOTICE-HOST-%: ;
    NOTICE-TARGET-%: ;
    # A helper goal printing out install paths
    .PHONY: GET-INSTALL-PATH
    GET-INSTALL-PATH:
    @$(foreach m, $(ALL_MODULES), $(if $(ALL_MODULES.$(m).INSTALLED), \
    echo 'INSTALL-PATH: $(m) $(ALL_MODULES.$(m).INSTALLED)';))
    else # ONE_SHOT_MAKEFILE
    ifneq ($(dont_bother),true)
    # Include all of the makefiles in the system
    # Can't use first-makefiles-under here because
    # --mindepth=2 makes the prunes not work.
    subdir_makefiles := \
    $(shell build/tools/findleaves.py --prune=$(OUT_DIR) --prune=.repo --prune=.git $(subdirs) Android.mk)
    ifneq ($(HIDE_MAKEFILE_INCLUDES),y)
    $(foreach mk, $(subdir_makefiles), $(info including $(mk) ...)$(eval include $(mk)))
    else
    $(foreach mk, $(subdir_makefiles), $(eval include $(mk)))
    endif
    endif # dont_bother
    endif # ONE_SHOT_MAKEFILE
    # Now with all Android.mks loaded we can do post cleaning steps.
    include $(BUILD_SYSTEM)/post_clean.mk
    ifeq ($(stash_product_vars),true)
    $(call assert-product-vars, __STASHED)
    endif
    include $(BUILD_SYSTEM)/legacy_prebuilts.mk
    ifneq ($(filter-out $(GRANDFATHERED_ALL_PREBUILT),$(strip $(notdir $(ALL_PREBUILT)))),)
    $(warning *** Some files have been added to ALL_PREBUILT.)
    $(warning *)
    $(warning * ALL_PREBUILT is a deprecated mechanism that)
    $(warning * should not be used for new files.)
    $(warning * As an alternative, use PRODUCT_COPY_FILES in)
    $(warning * the appropriate product definition.)
    $(warning * build/target/product/core.mk is the product)
    $(warning * definition used in all products.)
    $(warning *)
    $(foreach bad_prebuilt,$(filter-out $(GRANDFATHERED_ALL_PREBUILT),$(strip $(notdir $(ALL_PREBUILT)))),$(warning * unexpected $(bad_prebuilt) in ALL_PREBUILT))
    $(warning *)
    $(error ALL_PREBUILT contains unexpected files)
    endif
    # All module makefiles have been included at this point.
    # Fix up CUSTOM_MODULES to refer to installed files rather than
    # just bare module names. Leave unknown modules alone in case
    # they're actually full paths to a particular file.
    known_custom_modules := $(filter $(ALL_MODULES),$(CUSTOM_MODULES))
    unknown_custom_modules := $(filter-out $(ALL_MODULES),$(CUSTOM_MODULES))
    CUSTOM_MODULES := \
    $(call module-installed-files,$(known_custom_modules)) \
    $(unknown_custom_modules)
    # Define dependencies for modules that require other modules.
    # This can only happen now, after we've read in all module makefiles.
    # TODO: deal with the fact that a bare module name isn't
    # unambiguous enough. Maybe declare short targets like
    # APPS:Quake or HOST:SHARED_LIBRARIES:libutils.
    # BUG: the system image won't know to depend on modules that are
    # brought in as requirements of other modules.
    define add-required-deps
    $(1): | $(2)
    endef
    $(foreach m,$(ALL_MODULES), \
    $(eval r := $(ALL_MODULES.$(m).REQUIRED)) \
    $(if $(r), \
    $(eval r := $(call module-installed-files,$(r))) \
    $(eval t_m := $(filter $(TARGET_OUT_ROOT)/%, $(ALL_MODULES.$(m).INSTALLED))) \
    $(eval h_m := $(filter $(HOST_OUT_ROOT)/%, $(ALL_MODULES.$(m).INSTALLED))) \
    $(eval t_r := $(filter $(TARGET_OUT_ROOT)/%, $(r))) \
    $(eval h_r := $(filter $(HOST_OUT_ROOT)/%, $(r))) \
    $(if $(t_m), $(eval $(call add-required-deps, $(t_m),$(t_r)))) \
    $(if $(h_m), $(eval $(call add-required-deps, $(h_m),$(h_r)))) \
    t_m :=
    h_m :=
    t_r :=
    h_r :=
    # Resolve the dependencies on shared libraries.
    $(foreach m,$(TARGET_DEPENDENCIES_ON_SHARED_LIBRARIES), \
    $(eval p := $(subst :,$(space),$(m))) \
    $(eval r := $(filter $(TARGET_OUT_ROOT)/%,$(call module-installed-files,\
    $(subst $(comma),$(space),$(lastword $(p)))))) \
    $(eval $(call add-required-deps,$(word 2,$(p)),$(r))))
    $(foreach m,$(HOST_DEPENDENCIES_ON_SHARED_LIBRARIES), \
    $(eval p := $(subst :,$(space),$(m))) \
    $(eval r := $(filter $(HOST_OUT_ROOT)/%,$(call module-installed-files,\
    $(subst $(comma),$(space),$(lastword $(p)))))) \
    $(eval $(call add-required-deps,$(word 2,$(p)),$(r))))
    m :=
    r :=
    p :=
    add-required-deps :=
    # Figure out our module sets.
    # Of the modules defined by the component makefiles,
    # determine what we actually want to build.
    ifdef FULL_BUILD
    # The base list of modules to build for this product is specified
    # by the appropriate product definition file, which was included
    # by product_config.make.
    product_MODULES := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES)
    # Filter out the overridden packages before doing expansion
    product_MODULES := $(filter-out $(foreach p, $(product_MODULES), \
    $(PACKAGES.$(p).OVERRIDES)), $(product_MODULES))
    $(call expand-required-modules,product_MODULES,$(product_MODULES))
    product_FILES := $(call module-installed-files, $(product_MODULES))
    ifeq (0,1)
    $(info product_FILES for $(TARGET_DEVICE) ($(INTERNAL_PRODUCT)):)
    $(foreach p,$(product_FILES),$(info : $(p)))
    $(error done)
    endif
    else
    # We're not doing a full build, and are probably only including
    # a subset of the module makefiles. Don't try to build any modules
    # requested by the product, because we probably won't have rules
    # to build them.
    product_FILES :=
    endif
    eng_MODULES := $(sort \
    $(call get-tagged-modules,eng) \
    $(call module-installed-files, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_ENG)) \
    debug_MODULES := $(sort \
    $(call get-tagged-modules,debug) \
    $(call module-installed-files, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_DEBUG)) \
    tests_MODULES := $(sort \
    $(call get-tagged-modules,tests) \
    $(call module-installed-files, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_TESTS)) \
    # TODO: Remove the 3 places in the tree that use ALL_DEFAULT_INSTALLED_MODULES
    # and get rid of it from this list.
    # TODO: The shell is chosen by magic. Do we still need this?
    modules_to_install := $(sort \
    $(ALL_DEFAULT_INSTALLED_MODULES) \
    $(product_FILES) \
    $(foreach tag,$(tags_to_install),$($(tag)_MODULES)) \
    $(call get-tagged-modules, shell_$(TARGET_SHELL)) \
    $(CUSTOM_MODULES) \
    # Some packages may override others using LOCAL_OVERRIDES_PACKAGES.
    # Filter out (do not install) any overridden packages.
    overridden_packages := $(call get-package-overrides,$(modules_to_install))
    ifdef overridden_packages
    # old_modules_to_install := $(modules_to_install)
    modules_to_install := \
    $(filter-out $(foreach p,$(overridden_packages),$(p) %/$(p).apk), \
    $(modules_to_install))
    endif
    #$(error filtered out
    # $(filter-out $(modules_to_install),$(old_modules_to_install)))
    # Don't include any GNU targets in the SDK. It's ok (and necessary)
    # to build the host tools, but nothing that's going to be installed
    # on the target (including static libraries).
    ifdef is_sdk_build
    target_gnu_MODULES := \
    $(filter \
    $(TARGET_OUT_INTERMEDIATES)/% \
    $(TARGET_OUT)/% \
    $(TARGET_OUT_DATA)/%, \
    $(sort $(call get-tagged-modules,gnu)))
    $(info Removing from sdk:)$(foreach d,$(target_gnu_MODULES),$(info : $(d)))
    modules_to_install := \
    $(filter-out $(target_gnu_MODULES),$(modules_to_install))
    # Ensure every module listed in PRODUCT_PACKAGES* gets something installed
    # TODO: Should we do this for all builds and not just the sdk?
    $(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES), \
    $(if $(strip $(ALL_MODULES.$(m).INSTALLED)),,\
    $(error $(ALL_MODULES.$(m).MAKEFILE): Module '$(m)' in PRODUCT_PACKAGES has nothing to install!)))
    $(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_DEBUG), \
    $(if $(strip $(ALL_MODULES.$(m).INSTALLED)),,\
    $(warning $(ALL_MODULES.$(m).MAKEFILE): Module '$(m)' in PRODUCT_PACKAGES_DEBUG has nothing to install!)))
    $(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_ENG), \
    $(if $(strip $(ALL_MODULES.$(m).INSTALLED)),,\
    $(warning $(ALL_MODULES.$(m).MAKEFILE): Module '$(m)' in PRODUCT_PACKAGES_ENG has nothing to install!)))
    $(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_TESTS), \
    $(if $(strip $(ALL_MODULES.$(m).INSTALLED)),,\
    $(warning $(ALL_MODULES.$(m).MAKEFILE): Module '$(m)' in PRODUCT_PACKAGES_TESTS has nothing to install!)))
    endif
    # build/core/Makefile contains extra stuff that we don't want to pollute this
    # top-level makefile with. It expects that ALL_DEFAULT_INSTALLED_MODULES
    # contains everything that's built during the current make, but it also further
    # extends ALL_DEFAULT_INSTALLED_MODULES.
    ALL_DEFAULT_INSTALLED_MODULES := $(modules_to_install)
    include $(BUILD_SYSTEM)/Makefile
    modules_to_install := $(sort $(ALL_DEFAULT_INSTALLED_MODULES))
    ALL_DEFAULT_INSTALLED_MODULES :=
    # These are additional goals that we build, in order to make sure that there
    # is as little code as possible in the tree that doesn't build.
    modules_to_check := $(foreach m,$(ALL_MODULES),$(ALL_MODULES.$(m).CHECKED))
    # If you would like to build all goals, and not skip any intermediate
    # steps, you can pass the "all" modifier goal on the commandline.
    ifneq ($(filter all,$(MAKECMDGOALS)),)
    modules_to_check += $(foreach m,$(ALL_MODULES),$(ALL_MODULES.$(m).BUILT))
    endif
    # for easier debugging
    modules_to_check := $(sort $(modules_to_check))
    #$(error modules_to_check $(modules_to_check))
    # This is used to to get the ordering right, you can also use these,
    # but they're considered undocumented, so don't complain if their
    # behavior changes.
    .PHONY: prebuilt
    prebuilt: $(ALL_PREBUILT)
    # An internal target that depends on all copied headers
    # (see copy_headers.make). Other targets that need the
    # headers to be copied first can depend on this target.
    .PHONY: all_copied_headers
    all_copied_headers: ;
    $(ALL_C_CPP_ETC_OBJECTS): | all_copied_headers
    # All the droid stuff, in directories
    .PHONY: files
    files: prebuilt \
    $(modules_to_install) \
    $(INSTALLED_ANDROID_INFO_TXT_TARGET)
    .PHONY: checkbuild
    checkbuild: $(modules_to_check)
    ifeq (true,$(ANDROID_BUILD_EVERYTHING_BY_DEFAULT)$(filter $(MAKECMDGOALS),checkbuild))
    droid: checkbuild
    else
    # ANDROID_BUILD_EVERYTHING_BY_DEFAULT not set, or checkbuild is one of the cmd goals.
    checkbuild: droid
    endif
    .PHONY: ramdisk
    ramdisk: $(INSTALLED_RAMDISK_TARGET)
    .PHONY: factory_ramdisk
    factory_ramdisk: $(INSTALLED_FACTORY_RAMDISK_TARGET)
    .PHONY: factory_bundle
    factory_bundle: $(INSTALLED_FACTORY_BUNDLE_TARGET)
    .PHONY: systemtarball
    systemtarball: $(INSTALLED_SYSTEMTARBALL_TARGET)
    .PHONY: boottarball
    boottarball: $(INSTALLED_BOOTTARBALL_TARGET)
    .PHONY: userdataimage
    userdataimage: $(INSTALLED_USERDATAIMAGE_TARGET)
    ifneq (,$(filter userdataimage, $(MAKECMDGOALS)))
    $(call dist-for-goals, userdataimage, $(BUILT_USERDATAIMAGE_TARGET))
    endif
    .PHONY: userdatatarball
    userdatatarball: $(INSTALLED_USERDATATARBALL_TARGET)
    .PHONY: cacheimage
    cacheimage: $(INSTALLED_CACHEIMAGE_TARGET)
    .PHONY: vendorimage
    vendorimage: $(INSTALLED_VENDORIMAGE_TARGET)
    .PHONY: bootimage
    bootimage: $(INSTALLED_BOOTIMAGE_TARGET)
    # phony target that include any targets in $(ALL_MODULES)
    .PHONY: all_modules
    ifndef BUILD_MODULES_IN_PATHS
    all_modules: $(ALL_MODULES)
    else
    # BUILD_MODULES_IN_PATHS is a list of paths relative to the top of the tree
    module_path_patterns := $(foreach p, $(BUILD_MODULES_IN_PATHS),\
    $(if $(filter %/,$(p)),$(p)%,$(p)/%))
    my_all_modules := $(sort $(foreach m, $(ALL_MODULES),$(if $(filter\
    $(module_path_patterns), $(addsuffix /,$(ALL_MODULES.$(m).PATH))),$(m))))
    all_modules: $(my_all_modules)
    endif
    # Build files and then package it into the rom formats
    .PHONY: droidcore
    droidcore: files \
    systemimage \
    $(INSTALLED_BOOTIMAGE_TARGET) \
    $(INSTALLED_RECOVERYIMAGE_TARGET) \
    $(INSTALLED_USERDATAIMAGE_TARGET) \
    $(INSTALLED_CACHEIMAGE_TARGET) \
    $(INSTALLED_VENDORIMAGE_TARGET) \
    $(INSTALLED_FILES_FILE)
    # dist_files only for putting your library into the dist directory with a full build.
    .PHONY: dist_files
    ifneq ($(TARGET_BUILD_APPS),)
    # If this build is just for apps, only build apps and not the full system by default.
    unbundled_build_modules :=
    ifneq ($(filter all,$(TARGET_BUILD_APPS)),)
    # If they used the magic goal "all" then build all apps in the source tree.
    unbundled_build_modules := $(foreach m,$(sort $(ALL_MODULES)),$(if $(filter APPS,$(ALL_MODULES.$(m).CLASS)),$(m)))
    else
    unbundled_build_modules := $(TARGET_BUILD_APPS)
    endif
    # Dist the installed files if they exist.
    apps_only_installed_files := $(foreach m,$(unbundled_build_modules),$(ALL_MODULES.$(m).INSTALLED))
    $(call dist-for-goals,apps_only, $(apps_only_installed_files))
    # For uninstallable modules such as static Java library, we have to dist the built file,
    # as <module_name>.<suffix>
    apps_only_dist_built_files := $(foreach m,$(unbundled_build_modules),$(if $(ALL_MODULES.$(m).INSTALLED),,\
    $(if $(ALL_MODULES.$(m).BUILT),$(ALL_MODULES.$(m).BUILT):$(m)$(suffix $(ALL_MODULES.$(m).BUILT)))))
    $(call dist-for-goals,apps_only, $(apps_only_dist_built_files))
    ifeq ($(EMMA_INSTRUMENT),true)
    $(EMMA_META_ZIP) : $(apps_only_installed_files)
    $(call dist-for-goals,apps_only, $(EMMA_META_ZIP))
    endif
    $(PROGUARD_DICT_ZIP) : $(apps_only_installed_files)
    $(call dist-for-goals,apps_only, $(PROGUARD_DICT_ZIP))
    .PHONY: apps_only
    apps_only: $(unbundled_build_modules)
    droid: apps_only
    # Combine the NOTICE files for a apps_only build
    $(eval $(call combine-notice-files, \
    $(target_notice_file_txt), \
    $(target_notice_file_html), \
    "Notices for files for apps:", \
    $(TARGET_OUT_NOTICE_FILES), \
    $(apps_only_installed_files)))
    else # TARGET_BUILD_APPS
    $(call dist-for-goals, droidcore, \
    $(INTERNAL_UPDATE_PACKAGE_TARGET) \
    $(INTERNAL_OTA_PACKAGE_TARGET) \
    $(SYMBOLS_ZIP) \
    $(INSTALLED_FILES_FILE) \
    $(INSTALLED_BUILD_PROP_TARGET) \
    $(BUILT_TARGET_FILES_PACKAGE) \
    $(INSTALLED_ANDROID_INFO_TXT_TARGET) \
    $(INSTALLED_RAMDISK_TARGET) \
    $(INSTALLED_FACTORY_RAMDISK_TARGET) \
    $(INSTALLED_FACTORY_BUNDLE_TARGET) \
    # Put a copy of the radio/bootloader files in the dist dir.
    $(foreach f,$(INSTALLED_RADIOIMAGE_TARGET), \
    $(call dist-for-goals, droidcore, $(f)))
    ifneq ($(TARGET_BUILD_PDK),true)
    $(call dist-for-goals, droidcore, \
    $(APPS_ZIP) \
    $(INTERNAL_EMULATOR_PACKAGE_TARGET) \
    $(PACKAGE_STATS_FILE) \
    endif
    ifeq ($(EMMA_INSTRUMENT),true)
    $(EMMA_META_ZIP) : $(INSTALLED_SYSTEMIMAGE)
    $(call dist-for-goals, dist_files, $(EMMA_META_ZIP))
    endif
    # Building a full system-- the default is to build droidcore
    droid: droidcore dist_files
    endif # TARGET_BUILD_APPS
    .PHONY: docs
    docs: $(ALL_DOCS)
    .PHONY: sdk
    ALL_SDK_TARGETS := $(INTERNAL_SDK_TARGET)
    sdk: $(ALL_SDK_TARGETS)
    $(call dist-for-goals,sdk win_sdk, \
    $(ALL_SDK_TARGETS) \
    $(SYMBOLS_ZIP) \
    $(INSTALLED_BUILD_PROP_TARGET) \
    # umbrella targets to assit engineers in verifying builds
    .PHONY: java native target host java-host java-target native-host native-target \
    java-host-tests java-target-tests native-host-tests native-target-tests \
    java-tests native-tests host-tests target-tests
    # some synonyms
    .PHONY: host-java target-java host-native target-native \
    target-java-tests target-native-tests
    host-java : java-host
    target-java : java-target
    host-native : native-host
    target-native : native-target
    target-java-tests : java-target-tests
    target-native-tests : native-target-tests
    .PHONY: lintall
    .PHONY: samplecode
    sample_MODULES := $(sort $(call get-tagged-modules,samples))
    sample_APKS_DEST_PATH := $(TARGET_COMMON_OUT_ROOT)/samples
    sample_APKS_COLLECTION := \
    $(foreach module,$(sample_MODULES),$(sample_APKS_DEST_PATH)/$(notdir $(module)))
    $(foreach module,$(sample_MODULES),$(eval $(call \
    copy-one-file,$(module),$(sample_APKS_DEST_PATH)/$(notdir $(module)))))
    sample_ADDITIONAL_INSTALLED := \
    $(filter-out $(modules_to_install) $(modules_to_check) $(ALL_PREBUILT),$(sample_MODULES))
    samplecode: $(sample_APKS_COLLECTION)
    @echo -e ${PRT_TGT}"Collect sample code apks:"${CL_RST}" $^"
    # remove apks that are not intended to be installed.
    rm -f $(sample_ADDITIONAL_INSTALLED)
    .PHONY: findbugs
    findbugs: $(INTERNAL_FINDBUGS_HTML_TARGET) $(INTERNAL_FINDBUGS_XML_TARGET)
    .PHONY: clean
    clean:
    @rm -rf $(OUT_DIR)
    @echo -e ${PRT_TGT}"Entire build directory removed."${CL_RST}
    .PHONY: clobber
    clobber: clean
    # The rules for dataclean and installclean are defined in cleanbuild.mk.
    #xxx scrape this from ALL_MODULE_NAME_TAGS
    .PHONY: modules
    modules:
    @echo -e ${PRT_TGT}"Available sub-modules:"${CL_RST}
    @echo "$(call module-names-for-tag-list,$(ALL_MODULE_TAGS))" | \
    tr -s ' ' '\n' | sort -u | $(COLUMN)
    .PHONY: showcommands
    showcommands:
    @echo >/dev/null
    .PHONY: nothing
    nothing:
    @echo Successfully read the makefiles.

  • Help Reading NTFS Drive

    Hello,
    My fiancee recently got a MacBook Pro to replace her aging PC. She has an external Maxtor 300GB hard drive formatted in NTFS with ALL her photos, music and files on it. None of the Macs in our household (all running 10.4.9) can recognize the disk. According to Apple, Tiger should at least be able to read this disk, but it cannot.
    I even took the Maxtor to the Apple Store and they had no idea why it wouldn't work.
    I know other people have had similar problems with NTFS drives. I've searched the forums, but I haven't found any answers.
    Any advice?
    -Dustin

    What you can do is put the hard drive inside another
    hard drive case known to be Mac compatible.
    http://www.macsales.com/ sells such hard drive
    cases for notebook drives. Just verify whether the
    drive is Parallel ATA/IDE or SATA before getting the
    case. It may just be that the drive case it
    currently is in does not have the correct firmware
    that is industry spec, and thus why the Mac can't
    read it.
    Ohhh, that makes sense. What about a firmware update to the drive? I'll check Maxtor's site.
    Thanks!
    -Dustin

Maybe you are looking for