[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
-
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,
SKHi,
Try entering your own text in simple search and advanced search instructions.
Thanks,
Gaurav -
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!!!! -
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 ThanksgivingHow 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,
RamanHi 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. -
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?
-DustinWhat 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
-
After installing an application that was created using the Application Builder
After installing an application that I created using the Application Builder I get this error if I try to run " ANY " LabVIEW App's that I have built. "Executable Version 7.1.1 doesn't match Resource File 7.1. Check your configuration." The way that
-
What are the implications of using jquery version 1.10.2 rather than the version (1.7.1) that Adobe uses? Thanks Bob
-
Mac Mail do not read/show emails prior Lion update
Hi! I have faced the same problems as many others with Mac Mail (on my iMac), ie. could not launch Mail after update. Solved that problem with deleting some plist-files and everything looked good. However, Mail can not read/show/find emails prior the
-
I just bought a new iMac 21.5" and am uploading all my music and pics from my external, iPad and iPhone 5. My iPhoto in my iMac only uploaded the last 30 days of pictures in my photostream, and I've got like 5 months worth of pictures in there that
-
I have 3 devices I listen to Podcasts on - A Macbook Pro running iTunes 11.4, an iPad 2 running IOS8.0.2 and an iPhone 5 also running IOS8.0.2 I've been unable to get podcasts to synchronise between devices. What is subscribed is synchronised, but wh