chiark / gitweb /
add more SDK checks: build-tools/19.0.3 and presense of aapt
authorHans-Christoph Steiner <hans@eds.org>
Fri, 30 May 2014 01:43:16 +0000 (21:43 -0400)
committerHans-Christoph Steiner <hans@eds.org>
Thu, 5 Jun 2014 01:54:55 +0000 (21:54 -0400)
Make sure that fdroid can find aapt in the current config, otherwise exit
with an error.  Some users don't have build_tools set, and their SDK does
not include the build-tools in the default versioned dir, so this should
warn them of what is wrong.

fdroidserver/common.py
fdroidserver/init.py
tests/run-tests

index 9854cd3278d0c4fbf67caca6838387aefc6ffa31..a5e9bd09bc699d7f17488a4c995784a1645931f0 100644 (file)
@@ -144,6 +144,23 @@ def test_sdk_exists(c):
     return True
 
 
+def test_build_tools_exists(c):
+    if not test_sdk_exists(c):
+        return False
+    build_tools = os.path.join(c['sdk_path'], 'build-tools')
+    versioned_build_tools = os.path.join(build_tools, c['build_tools'])
+    if not os.path.isdir(versioned_build_tools):
+        logging.critical('Android Build Tools path "'
+                         + versioned_build_tools + '" does not exist!')
+        return False
+    if not os.path.exists(os.path.join(c['sdk_path'], 'build-tools', c['build_tools'], 'aapt')):
+        logging.critical('Android Build Tools "'
+                         + versioned_build_tools
+                         + '" does not contain "aapt"!')
+        return False
+    return True
+
+
 def write_password_file(pwtype, password=None):
     '''
     writes out passwords to a protected file instead of passing passwords as
index ace07bf804659502c39ebcbf81c5f35f2f856e45..c51b6e59bdd7af75262183706f7ee2b93461d97f 100644 (file)
@@ -155,18 +155,15 @@ def main():
         logging.info('Try running `fdroid init` in an empty directory.')
         sys.exit()
 
-    # now that we have a local config.py, read configuration...
-    config = common.read_config(options)
-
     # try to find a working aapt, in all the recent possible paths
-    build_tools = os.path.join(config['sdk_path'], 'build-tools')
+    build_tools = os.path.join(test_config['sdk_path'], 'build-tools')
     aaptdirs = []
-    aaptdirs.append(os.path.join(build_tools, config['build_tools']))
+    aaptdirs.append(os.path.join(build_tools, test_config['build_tools']))
     aaptdirs.append(build_tools)
-    for f in sorted(os.listdir(build_tools), reverse=True):
+    for f in os.listdir(build_tools):
         if os.path.isdir(os.path.join(build_tools, f)):
             aaptdirs.append(os.path.join(build_tools, f))
-    for d in aaptdirs:
+    for d in sorted(aaptdirs, reverse=True):
         if os.path.isfile(os.path.join(d, 'aapt')):
             aapt = os.path.join(d, 'aapt')
             break
@@ -174,9 +171,15 @@ def main():
         dirname = os.path.basename(os.path.dirname(aapt))
         if dirname == 'build-tools':
             # this is the old layout, before versioned build-tools
-            write_to_config('build_tools', '')
+            test_config['build_tools'] = ''
         else:
-            write_to_config('build_tools', dirname)
+            test_config['build_tools'] = dirname
+        write_to_config('build_tools', test_config['build_tools'])
+    if not common.test_build_tools_exists(test_config):
+        sys.exit(3)
+
+    # now that we have a local config.py, read configuration...
+    config = common.read_config(options)
 
     # track down where the Android NDK is
     ndk_path = '/opt/android-ndk'
index 2d0ad5cdca377bc5934a730805b06c37c5d1bb38..f3e9a3e7589dded177239175179434a95341dabc 100755 (executable)
@@ -3,6 +3,11 @@
 set -e
 set -x
 
+echo_header() {
+    echo "=============================================================================="
+    echo $1
+}
+
 copy_apks_into_repo() {
     for f in `ls -1 ../../*/bin/*.apk`; do
         name=$(basename $(dirname `dirname $f`))
@@ -40,7 +45,7 @@ if [ -z $fdroid ]; then
 fi
 
 #------------------------------------------------------------------------------#
-echo "setup a new repo from scratch using ANDROID_HOME"
+echo_header "setup a new repo from scratch using ANDROID_HOME"
 
 REPOROOT=`create_test_dir`
 cd $REPOROOT
@@ -76,7 +81,33 @@ set -e
 
 
 #------------------------------------------------------------------------------#
-echo "check that --android-home overrides ANDROID_HOME"
+echo_header "check that fake android home passes `fdroid init`"
+
+REPOROOT=`create_test_dir`
+FAKE_ANDROID_HOME=`create_test_dir`
+create_fake_android_home $FAKE_ANDROID_HOME
+KEYSTORE=$REPOROOT/keystore.jks
+cd $REPOROOT
+$fdroid init --keystore $KEYSTORE --android-home $FAKE_ANDROID_HOME
+
+
+#------------------------------------------------------------------------------#
+echo_header "check that 'fdroid init' fails when build-tools cannot be found"
+
+REPOROOT=`create_test_dir`
+FAKE_ANDROID_HOME=`create_test_dir`
+create_fake_android_home $FAKE_ANDROID_HOME
+rm -f $FAKE_ANDROID_HOME/build-tools/*/aapt
+KEYSTORE=$REPOROOT/keystore.jks
+cd $REPOROOT
+set +e
+$fdroid init --keystore $KEYSTORE --android-home $FAKE_ANDROID_HOME
+[ $? -eq 0 ] && exit 1
+set -e
+
+
+#------------------------------------------------------------------------------#
+echo_header "check that --android-home overrides ANDROID_HOME"
 
 REPOROOT=`create_test_dir`
 FAKE_ANDROID_HOME=`create_test_dir`
@@ -94,7 +125,7 @@ set -e
 
 
 #------------------------------------------------------------------------------#
-echo "setup a new repo from scratch with keystore and android-home set on cmd line"
+echo_header "setup a new repo from scratch with keystore and android-home set on cmd line"
 
 REPOROOT=`create_test_dir`
 KEYSTORE=$REPOROOT/keystore.jks
@@ -115,7 +146,7 @@ export ANDROID_HOME=$STORED_ANDROID_HOME
 
 
 #------------------------------------------------------------------------------#
-echo "setup new repo from scratch using ANDROID_HOME, putting APKs in repo first"
+echo_header "setup new repo from scratch using ANDROID_HOME, putting APKs in repo first"
 
 REPOROOT=`create_test_dir`
 cd $REPOROOT
@@ -127,7 +158,7 @@ $fdroid update
 
 
 #------------------------------------------------------------------------------#
-echo "setup a new repo from scratch and generate a keystore"
+echo_header "setup a new repo from scratch and generate a keystore"
 
 REPOROOT=`create_test_dir`
 KEYSTORE=$REPOROOT/keystore.jks
@@ -142,7 +173,7 @@ test -e repo/index.jar
 
 
 #------------------------------------------------------------------------------#
-echo "setup a new repo from scratch with a HSM/smartcard"
+echo_header "setup a new repo from scratch with a HSM/smartcard"
 
 REPOROOT=`create_test_dir`
 cd $REPOROOT