sdklauncher.c revision 6508be1224ddec08910c464d2a905c4c2e1f7d80
16508be1224ddec08910c464d2a905c4c2e1f7d80Raphael/*
26508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * Copyright (C) 2009 The Android Open Source Project
36508be1224ddec08910c464d2a905c4c2e1f7d80Raphael *
46508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * Licensed under the Apache License, Version 2.0 (the "License");
56508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * you may not use this file except in compliance with the License.
66508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * You may obtain a copy of the License at
76508be1224ddec08910c464d2a905c4c2e1f7d80Raphael *
86508be1224ddec08910c464d2a905c4c2e1f7d80Raphael *      http://www.apache.org/licenses/LICENSE-2.0
96508be1224ddec08910c464d2a905c4c2e1f7d80Raphael *
106508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * Unless required by applicable law or agreed to in writing, software
116508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * distributed under the License is distributed on an "AS IS" BASIS,
126508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * See the License for the specific language governing permissions and
146508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * limitations under the License.
156508be1224ddec08910c464d2a905c4c2e1f7d80Raphael */
166508be1224ddec08910c464d2a905c4c2e1f7d80Raphael
176508be1224ddec08910c464d2a905c4c2e1f7d80Raphael/*
186508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * The "SDK Launcher" is for Windows only.
196508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * This simple .exe will sit at the root of the Windows SDK
206508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * and currently simply executes tools\android.bat.
216508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * Eventually it should simply replace the batch file.
226508be1224ddec08910c464d2a905c4c2e1f7d80Raphael *
236508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * TODO:
246508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * - detect that java is installed; error dialog if not, explaning where to get it.
256508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * - create temp dir, always copy *.jar there, exec android.jar
266508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * - get jars to copy from some file
276508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * - use a version number to copy jars only if needed (tools.revision?)
286508be1224ddec08910c464d2a905c4c2e1f7d80Raphael */
296508be1224ddec08910c464d2a905c4c2e1f7d80Raphael
306508be1224ddec08910c464d2a905c4c2e1f7d80Raphael#ifdef _WIN32
316508be1224ddec08910c464d2a905c4c2e1f7d80Raphael
326508be1224ddec08910c464d2a905c4c2e1f7d80Raphael#include <stdio.h>
336508be1224ddec08910c464d2a905c4c2e1f7d80Raphael#include <windows.h>
346508be1224ddec08910c464d2a905c4c2e1f7d80Raphael
356508be1224ddec08910c464d2a905c4c2e1f7d80Raphaelint sdk_launcher() {
366508be1224ddec08910c464d2a905c4c2e1f7d80Raphael    STARTUPINFO           startup;
376508be1224ddec08910c464d2a905c4c2e1f7d80Raphael    PROCESS_INFORMATION   pinfo;
386508be1224ddec08910c464d2a905c4c2e1f7d80Raphael    char                  program_path[MAX_PATH];
396508be1224ddec08910c464d2a905c4c2e1f7d80Raphael    int                   ret;
406508be1224ddec08910c464d2a905c4c2e1f7d80Raphael
416508be1224ddec08910c464d2a905c4c2e1f7d80Raphael    ZeroMemory(&startup, sizeof(startup));
426508be1224ddec08910c464d2a905c4c2e1f7d80Raphael    startup.cb = sizeof(startup);
436508be1224ddec08910c464d2a905c4c2e1f7d80Raphael
446508be1224ddec08910c464d2a905c4c2e1f7d80Raphael    ZeroMemory(&pinfo, sizeof(pinfo));
456508be1224ddec08910c464d2a905c4c2e1f7d80Raphael
466508be1224ddec08910c464d2a905c4c2e1f7d80Raphael    /* get path of current program */
476508be1224ddec08910c464d2a905c4c2e1f7d80Raphael    GetModuleFileName(NULL, program_path, sizeof(program_path));
486508be1224ddec08910c464d2a905c4c2e1f7d80Raphael
496508be1224ddec08910c464d2a905c4c2e1f7d80Raphael    ret = CreateProcess(
506508be1224ddec08910c464d2a905c4c2e1f7d80Raphael            NULL,                                  /* program path */
516508be1224ddec08910c464d2a905c4c2e1f7d80Raphael            "tools\\android.bat update sdk",         /* command-line */
526508be1224ddec08910c464d2a905c4c2e1f7d80Raphael            NULL,                  /* process handle is not inheritable */
536508be1224ddec08910c464d2a905c4c2e1f7d80Raphael            NULL,                   /* thread handle is not inheritable */
546508be1224ddec08910c464d2a905c4c2e1f7d80Raphael            TRUE,                          /* yes, inherit some handles */
556508be1224ddec08910c464d2a905c4c2e1f7d80Raphael            CREATE_NO_WINDOW,                /* we don't want a console */
566508be1224ddec08910c464d2a905c4c2e1f7d80Raphael            NULL,                     /* use parent's environment block */
576508be1224ddec08910c464d2a905c4c2e1f7d80Raphael            NULL,                    /* use parent's starting directory */
586508be1224ddec08910c464d2a905c4c2e1f7d80Raphael            &startup,                 /* startup info, i.e. std handles */
596508be1224ddec08910c464d2a905c4c2e1f7d80Raphael            &pinfo);
606508be1224ddec08910c464d2a905c4c2e1f7d80Raphael
616508be1224ddec08910c464d2a905c4c2e1f7d80Raphael    if (!ret) {
626508be1224ddec08910c464d2a905c4c2e1f7d80Raphael        DWORD err = GetLastError();
636508be1224ddec08910c464d2a905c4c2e1f7d80Raphael        fprintf(stderr, "CreateProcess failure, error %ld\n", err);
646508be1224ddec08910c464d2a905c4c2e1f7d80Raphael
656508be1224ddec08910c464d2a905c4c2e1f7d80Raphael        LPSTR s;
666508be1224ddec08910c464d2a905c4c2e1f7d80Raphael        if (FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | /* dwFlags */
676508be1224ddec08910c464d2a905c4c2e1f7d80Raphael                          FORMAT_MESSAGE_FROM_SYSTEM,
686508be1224ddec08910c464d2a905c4c2e1f7d80Raphael                          NULL,                             /* lpSource */
696508be1224ddec08910c464d2a905c4c2e1f7d80Raphael                          err,                              /* dwMessageId */
706508be1224ddec08910c464d2a905c4c2e1f7d80Raphael                          0,                                /* dwLanguageId */
716508be1224ddec08910c464d2a905c4c2e1f7d80Raphael                          (LPSTR)&s,                        /* lpBuffer */
726508be1224ddec08910c464d2a905c4c2e1f7d80Raphael                          0,                                /* nSize */
736508be1224ddec08910c464d2a905c4c2e1f7d80Raphael                          NULL) != 0) {                     /* va_list args */
746508be1224ddec08910c464d2a905c4c2e1f7d80Raphael            fprintf(stderr, "%s", s);
756508be1224ddec08910c464d2a905c4c2e1f7d80Raphael            LocalFree(s);
766508be1224ddec08910c464d2a905c4c2e1f7d80Raphael        }
776508be1224ddec08910c464d2a905c4c2e1f7d80Raphael
786508be1224ddec08910c464d2a905c4c2e1f7d80Raphael        return -1;
796508be1224ddec08910c464d2a905c4c2e1f7d80Raphael    }
806508be1224ddec08910c464d2a905c4c2e1f7d80Raphael
816508be1224ddec08910c464d2a905c4c2e1f7d80Raphael    return 0;
826508be1224ddec08910c464d2a905c4c2e1f7d80Raphael}
836508be1224ddec08910c464d2a905c4c2e1f7d80Raphael
846508be1224ddec08910c464d2a905c4c2e1f7d80Raphaelint main(int argc, char **argv) {
856508be1224ddec08910c464d2a905c4c2e1f7d80Raphael    return sdk_launcher();
866508be1224ddec08910c464d2a905c4c2e1f7d80Raphael}
876508be1224ddec08910c464d2a905c4c2e1f7d80Raphael
886508be1224ddec08910c464d2a905c4c2e1f7d80Raphael#endif /* _WIN32 */
89