diff --git a/.gitignore b/.gitignore index b08d134..a01c9de 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,8 @@ +__pycache__ +.bck +out +target +build ################################### # folders diff --git a/GLD_gale-sample.json b/GLD_gale-sample.json new file mode 100644 index 0000000..dee6a5c --- /dev/null +++ b/GLD_gale-sample.json @@ -0,0 +1,30 @@ +{ + "type":"BINARY", + "sub-type":"SAMPLE", + "group-id":"com.atria-soft", + "description":"Simple windows with gale", + "license":"MPL-2", + "license-file":"file://LICENCE.txt", + "maintainer":"file://authors.txt", + "author":"file://authors.txt", + "version":"file://version.txt", + "code-quality":"MEDIUM", + + "source": [ + "sample/basic.cpp" + ], + "path":[ + "." + ], + "dependency": [ + "gale", + "test-debug" + ], + "copy":[ + { + "path":"sample/basic.frag" + }, { + "path":"sample/basic.vert" + } + ] +} \ No newline at end of file diff --git a/GLD_gale.json b/GLD_gale.json new file mode 100644 index 0000000..c4c33e2 --- /dev/null +++ b/GLD_gale.json @@ -0,0 +1,224 @@ +{ + "type":"LIBRARY", + "group-id":"com.atria-soft", + "description":"gale is a main library to use widget in the openGl environement and manage all the wraping os", + "license":"MPL-2", + "license-file":"file://LICENCE.txt", + "maintainer":"file://authors.txt", + "author":"file://authors.txt", + "version":"file://version.txt", + "code-quality":"MEDIUM", + + "source": [ + "gale/gale.cpp", + "gale/debug.cpp", + "gale/Dimension.cpp", + "gale/orientation.cpp", + "gale/Application.cpp", + "gale/Thread.cpp", + "gale/context/clipBoard.cpp", + "gale/context/commandLine.cpp", + "gale/context/Context.cpp", + "gale/context/cursor.cpp", + "gale/key/keyboard.cpp", + "gale/key/Special.cpp", + "gale/key/status.cpp", + "gale/key/type.cpp", + "gale/renderer/openGL/openGL.cpp", + "gale/resource/Manager.cpp", + "gale/resource/Program.cpp", + "gale/resource/Resource.cpp", + "gale/resource/Shader.cpp", + "gale/resource/Texture.cpp", + "gale/resource/VirtualBufferObject.cpp" + ], + "header": [ + "gale/debug.hpp", + "gale/gale.hpp", + "gale/Dimension.hpp", + "gale/orientation.hpp", + "gale/Application.hpp", + "gale/Thread.hpp", + "gale/context/clipBoard.hpp", + "gale/context/commandLine.hpp", + "gale/context/Context.hpp", + "gale/context/cursor.hpp", + "gale/context/Fps.hpp", + "gale/key/keyboard.hpp", + "gale/key/Special.hpp", + "gale/key/status.hpp", + "gale/key/type.hpp", + "gale/key/key.hpp", + "gale/renderer/openGL/openGL.hpp", + "gale/renderer/openGL/openGL-include.hpp", + "gale/resource/Manager.hpp", + "gale/resource/Program.hpp", + "gale/resource/Resource.hpp", + "gale/resource/Shader.hpp", + "gale/resource/Texture.hpp", + "gale/resource/VirtualBufferObject.hpp" + ], + "path":[ + "." + ], + "compilation-version": { + "language": "c++", + "version": 2017 + }, + "dependency": [ + "etk", + "opengl", + "echrono", + { + "name": "esignal", + "optional": true, + "export": true, + "flag": { + "language": "c++", + "value": "-DGALE_BUILD_ESIGNAL" + } + }, + { + "name": "eproperty", + "optional": true, + "export": true, + "flag": { + "language": "c++", + "value": "-DGALE_BUILD_EPROPERTY" + } + } + ], + "flag": { + "language": "c++", + "value": "-DGALE_VERSION=\"{{{project.version}}}\"" + }, + "target": { + "Windows": { + "source": [ + "gale/context/Windows/Context.cpp" + ], + "dependency": [ + "start-mode-gui", + "glew" + ] + }, + "Linux": { + "dependency": [ + { + "name": "X11", + "optional": true, + "export": true, + "source": [ + "gale/context/X11/Context.cpp" + ], + "flag": { + "language": "c++", + "value": "-DGALE_BUILD_X11" + } + },{ + "name": "wayland_____", + "optional": true, + "export": true, + "source": [ + "gale/context/wayland/Context.cpp" + ], + "flag": { + "language": "c++", + "value": "-DGALE_BUILD_WAYLAND" + }, + "dependency": [ + "egl", + "gles2", + "xkbcommon" + ], + "actions": { + "state": "PREPARE", + "cmd": "command_generateWaylandProtocol.py", + "data": {} + } + },{ + "name": "egami", + "optional": true, + "export": true, + "flag": { + "language": "c++", + "value": "-DGALE_BUILD_EGAMI" + } + } + ] + }, + "Android": { + "source": [ + "gale/context/Android/Context.cpp", + "android/src/org/gale/GaleCallback.java", + "android/src/org/gale/GaleConstants.java", + "android/src/org/gale/Gale.java", + "android/src/org/gale/GaleRendererGL.java", + "android/src/org/gale/GaleSurfaceViewGL.java", + "android/src/org/gale/GaleActivity.java", + "android/src/org/gale/GaleWallpaper.java", + "org.gale.GaleConstants.javah" + ], + "path":[ + "android/src/" + ], + "dependency": [ + "SDK", + "jvm-basics" + ], + "actions": { + "state": "BINARY", + "level": 50, + "name": "gale-auto-wrapper", + "cmd": "command_generateMainJavaClass.py", + "data": {} + } + }, + "MacOs": { + "source": [ + "gale/context/MacOs/Context.mm", + "gale/context/MacOs/Interface.mm", + "gale/context/MacOs/Windows.mm", + "gale/context/MacOs/OpenglView.mm", + "gale/context/MacOs/AppDelegate.mm" + ], + "dependency": [ + "Cocoa", + "QuartzCore", + "AppKit" + ] + }, + "IOs": { + "source": [ + "gale/context/IOs/Context.cpp", + "gale/context/IOs/Interface.m", + "gale/context/IOs/OpenglView.mm", + "gale/context/IOs/AppDelegate.mm" + ], + "dependency": [ + "CoreGraphics", + "UIKit", + "GLKit", + "Foundation", + "QuartzCore" + ] + }, + "Web": { + "source":"gale/context/SDL/Context.cpp", + "dependency": [ + "SDL" + ] + }, + "Linux|windows|MacOs": { + "mode": { + "debug": { + "flag": { + "language": "c++", + "value": "-DGALE_BUILD_SIMULATION", + "source": "gale/context/simulation/Context.cpp" + } + } + } + } + } +} diff --git a/command_generateMainJavaClass.py b/command_generateMainJavaClass.py new file mode 100644 index 0000000..628fc60 --- /dev/null +++ b/command_generateMainJavaClass.py @@ -0,0 +1,490 @@ + +################################################################## +## +## Android specific section +## +################################################################## +def tool_generate_main_java_class(target, module, package_name): + file_list = [] + + debug.debug("------------------------------------------------------------------------") + debug.debug("Generate android wrapping for '" + package_name + "' ==> '" + target.convert_name_application(package_name) + "'" ) + debug.debug("------------------------------------------------------------------------") + application_name = target.convert_name_application(package_name) + if target.get_mode() == "debug": + application_name += "debug" + target.path_java_project= target.get_build_path(package_name) \ + + "/src/" \ + + module.get_pkg("COMPAGNY_TYPE") \ + + "/" + module.get_pkg("COMPAGNY_NAME2") \ + + "/" + application_name + "/" + + java_file_wrapper = target.path_java_project + "/" + application_name + ".java" + + android_package_name = module.get_pkg("COMPAGNY_TYPE")+"."+module.get_pkg("COMPAGNY_NAME2")+"." + application_name + + debug.print_element("pkg", "absractionFile", "<==", "dynamic file") + # Create path : + tools.create_directory_of_file(java_file_wrapper) + debug.debug("create file : '" + java_file_wrapper + "'") + # Create file : + tmpFile = open(java_file_wrapper + "_tmp", 'w') + + tmpFile.write( "/**\n") + tmpFile.write( " * @author Edouard DUPIN, Kevin BILLONNEAU\n") + tmpFile.write( " * @copyright 2011, Edouard DUPIN, all right reserved\n") + tmpFile.write( " * @license MPL-2 (see license file)\n") + tmpFile.write( " * @note This file is autogenerate ==> see documantation to generate your own\n") + tmpFile.write( " */\n") + tmpFile.write( "package "+ android_package_name + ";\n") + tmpFile.write( "import android.util.Log;\n") + if module.get_pkg("ANDROID_APPL_TYPE")=="APPL": + tmpFile.write( "import org.gale.GaleActivity;\n") + else: + tmpFile.write( "import org.gale.GaleWallpaper;\n") + tmpFile.write( "\n") + + if module.get_pkg("GENERATE_SECTION__IMPORT") != None: + for elem in module.get_pkg("GENERATE_SECTION__IMPORT"): + for line in elem: + tmpFile.write( line + "\n") + if module.get_pkg("ANDROID_APPL_TYPE")=="APPL": + tmpFile.write( "public class " + application_name + " extends GaleActivity {\n") + else: + tmpFile.write( "public class " + application_name + " extends GaleWallpaper {\n") + tmpFile.write( " public static final String SHARED_PREFS_NAME = \"" + application_name + "settings\";\n") + + if module.get_pkg("GENERATE_SECTION__DECLARE") != None: + for elem in module.get_pkg("GENERATE_SECTION__DECLARE"): + for line in elem: + tmpFile.write( " " + line + "\n") + + tmpFile.write( " \n") + tmpFile.write( " static {\n") + tmpFile.write( " try {\n") + tmpFile.write( " System.loadLibrary(\"" + package_name + "\");\n") + tmpFile.write( " } catch (UnsatisfiedLinkError e) {\n") + tmpFile.write( " Log.e(\"" + application_name + "\", \"error getting lib(): \" + e);\n") + tmpFile.write( " }\n") + tmpFile.write( " }\n") + tmpFile.write( " \n") + if module.get_pkg("ANDROID_APPL_TYPE")!="APPL": + tmpFile.write( " public Engine onCreateEngine() {\n") + tmpFile.write( " initApkPath(\"" + module.get_pkg("COMPAGNY_TYPE")+"\", \""+module.get_pkg("COMPAGNY_NAME2")+"\", \"" + application_name + "\", \"" + package_name + "\");\n") + tmpFile.write( " Engine tmpEngine = super.onCreateEngine();\n") + tmpFile.write( " return tmpEngine;\n") + tmpFile.write( " }\n") + + if module.get_pkg("GENERATE_SECTION__CONSTRUCTOR") != None: + tmpFile.write( " public " + application_name + "() {\n") + for elem in module.get_pkg("GENERATE_SECTION__CONSTRUCTOR"): + for line in elem: + tmpFile.write( " " + line + "\n") + tmpFile.write( " }\n") + + if module.get_pkg("ANDROID_APPL_TYPE")!="APPL": + tmpFile.write( " public void onCreate() {\n") + tmpFile.write( " initApkPath(\"" + module.get_pkg("COMPAGNY_TYPE")+"\", \""+module.get_pkg("COMPAGNY_NAME2")+"\", \"" + application_name + "\", \"" + package_name + "\");\n") + tmpFile.write( " super.onCreate();\n") + else: + tmpFile.write( " public void onCreate(android.os.Bundle savedInstanceState) {\n") + tmpFile.write( " initApkPath(\"" + module.get_pkg("COMPAGNY_TYPE")+"\", \""+module.get_pkg("COMPAGNY_NAME2")+"\", \"" + application_name + "\", \"" + package_name + "\");\n") + tmpFile.write( " super.onCreate(savedInstanceState);\n") + + if module.get_pkg("GENERATE_SECTION__ON_CREATE") != None: + for elem in module.get_pkg("GENERATE_SECTION__ON_CREATE"): + for line in elem: + tmpFile.write( " " + line + "\n") + tmpFile.write( " }\n") + + + if module.get_pkg("GENERATE_SECTION__ON_START") != None: + tmpFile.write( " @Override protected void onStart() {\n") + for elem in module.get_pkg("GENERATE_SECTION__ON_START"): + for line in elem: + tmpFile.write( " " + line + "\n") + tmpFile.write( " super.onStart();\n") + tmpFile.write( " }\n") + + if module.get_pkg("GENERATE_SECTION__ON_RESTART") != None: + tmpFile.write( " @Override protected void onRestart() {\n") + for elem in module.get_pkg("GENERATE_SECTION__ON_RESTART"): + for line in elem: + tmpFile.write( " " + line + "\n") + tmpFile.write( " super.onRestart();\n") + tmpFile.write( " }\n") + + if module.get_pkg("GENERATE_SECTION__ON_RESUME") != None: + tmpFile.write( " @Override protected void onResume() {\n") + tmpFile.write( " super.onResume();\n") + for elem in module.get_pkg("GENERATE_SECTION__ON_RESUME"): + for line in elem: + tmpFile.write( " " + line + "\n") + tmpFile.write( " }\n") + + if module.get_pkg("GENERATE_SECTION__ON_PAUSE") != None: + tmpFile.write( " @Override protected void onPause() {\n") + for elem in module.get_pkg("GENERATE_SECTION__ON_PAUSE"): + for line in elem: + tmpFile.write( " " + line + "\n") + tmpFile.write( " super.onPause();\n") + tmpFile.write( " }\n") + + if module.get_pkg("GENERATE_SECTION__ON_STOP") != None: + tmpFile.write( " @Override protected void onStop() {\n") + for elem in module.get_pkg("GENERATE_SECTION__ON_STOP"): + for line in elem: + tmpFile.write( " " + line + "\n") + tmpFile.write( " super.onStop();\n") + tmpFile.write( " }\n") + + if module.get_pkg("GENERATE_SECTION__ON_DESTROY") != None: + tmpFile.write( " @Override protected void onDestroy() {\n") + for elem in module.get_pkg("GENERATE_SECTION__ON_DESTROY"): + for line in elem: + tmpFile.write( " " + line + "\n") + tmpFile.write( " super.onDestroy();\n") + tmpFile.write( " }\n") + tmpFile.write( "}\n") + tmpFile.flush() + tmpFile.close() + + tools.move_if_needed(java_file_wrapper + "_tmp", java_file_wrapper); + # add java file to build: + module.add_src_file([java_file_wrapper]) + + + ## todo: + """ + debug.warning("icon : " + module.get_pkg("ICON")) + tools.create_directory_of_file(target.get_staging_path(package_name) + "/res/drawable/icon.png"); + if module.get_pkg("ICON") != None \ + and module.get_pkg("ICON") != "": + image.resize(module.get_pkg("ICON"), target.get_staging_path(package_name) + "/res/drawable/icon.png", 256, 256) + # if must be copied befor as user data ... todo : check + pass + else: + debug.warning("copy a generic Atria-soft icon ...") + # to be sure that we have all time a resource ... + image.resize(os.path.join(tools.get_current_path(__file__),"atria-soft.png"), + os.path.join(target.get_staging_path(package_name), "res", "drawable", "icon.png"), + 256, 256) + """ + + if module.get_pkg("ANDROID_MANIFEST") == "": + # force manifest file: + module.set_pkg("ANDROID_MANIFEST", os.path.join(target.get_build_path(package_name), "AndroidManifest.xml")); + debug.debug(" create file: '" + module.get_pkg("ANDROID_MANIFEST") + "'") + if module.get_pkg("VERSION_CODE") == None: + module.set_pkg("VERSION_CODE", "1") + debug.print_element("pkg", "AndroidManifest.xml", "<==", "package configurations") + tools.create_directory_of_file(module.get_pkg("ANDROID_MANIFEST")) + tmpFile = open(module.get_pkg("ANDROID_MANIFEST"), 'w') + tmpFile.write( '\n') + tmpFile.write( '\n') + tmpFile.write( ' set it at '0' (this can creata an NON update on android play store)") + module.set_pkg("VERSION_CODE", "0") + tmpFile.write( ' android:versionCode="' + str(module.get_pkg("VERSION_CODE")) + '" \n') + tmpFile.write( ' android:versionName="'+tools.version_to_string(module.get_pkg("VERSION"))+'"> \n') + tmpFile.write( ' \n') + tmpFile.write( ' \n') + if module.get_pkg("ANDROID_APPL_TYPE")=="APPL": + tmpFile.write( ' \n') + if module.get_pkg("ADMOD_ID") != None: + tmpFile.write( ' \n') + + tmpFile.write( ' \n') + tmpFile.write( ' \n') + tmpFile.write( ' \n') + tmpFile.write( ' \n') + tmpFile.write( ' \n') + tmpFile.write( ' \n') + if module.get_pkg("ADMOD_ID") != None: + tmpFile.write( ' \n') + + tmpFile.write( ' \n') + else: + tmpFile.write( ' \n') + tmpFile.write( ' \n') + tmpFile.write( ' \n') + tmpFile.write( ' \n') + tmpFile.write( ' \n') + tmpFile.write( ' \n') + tmpFile.write( ' \n') + if len(module.get_pkg("ANDROID_WALLPAPER_PROPERTIES"))!=0: + tmpFile.write( ' \n') + tmpFile.write( ' \n') + tmpFile.write( ' \n') + # write package autorisations : + if "WRITE_EXTERNAL_STORAGE" in module.get_pkg("RIGHT"): + tmpFile.write( ' \n') + tmpFile.write( ' \n') + if "CAMERA" in module.get_pkg("RIGHT"): + tmpFile.write( ' \n') + tmpFile.write( ' \n') + if "INTERNET" in module.get_pkg("RIGHT"): + tmpFile.write( ' \n') + tmpFile.write( ' \n') + if "ACCESS_NETWORK_STATE" in module.get_pkg("RIGHT"): + tmpFile.write( ' \n') + tmpFile.write( ' \n') + if "MODIFY_AUDIO_SETTINGS" in module.get_pkg("RIGHT"): + tmpFile.write( ' \n') + tmpFile.write( ' \n') + if "READ_CALENDAR" in module.get_pkg("RIGHT"): + tmpFile.write( ' \n') + tmpFile.write( ' \n') + if "READ_CONTACTS" in module.get_pkg("RIGHT"): + tmpFile.write( ' \n') + tmpFile.write( ' \n') + if "READ_FRAME_BUFFER" in module.get_pkg("RIGHT"): + tmpFile.write( ' \n') + tmpFile.write( ' \n') + if "READ_PROFILE" in module.get_pkg("RIGHT"): + tmpFile.write( ' \n') + tmpFile.write( ' \n') + if "RECORD_AUDIO" in module.get_pkg("RIGHT"): + tmpFile.write( ' \n') + tmpFile.write( ' \n') + if "SET_ORIENTATION" in module.get_pkg("RIGHT"): + tmpFile.write( ' \n') + tmpFile.write( ' \n') + if "VIBRATE" in module.get_pkg("RIGHT"): + tmpFile.write( ' \n') + tmpFile.write( ' \n') + if "ACCESS_COARSE_LOCATION" in module.get_pkg("RIGHT"): + tmpFile.write( ' \n') + tmpFile.write( ' \n') + if "ACCESS_FINE_LOCATION" in module.get_pkg("RIGHT"): + tmpFile.write( ' \n') + tmpFile.write( ' \n') + tmpFile.write( '\n\n') + tmpFile.flush() + tmpFile.close() + # end generating android manifest + + if module.get_pkg("ANDROID_APPL_TYPE") != "APPL": + #create the Wallpaper sub files : (main element for the application + debug.print_element("pkg", application_name + "_resource.xml", "<==", "package configurations") + resource_file_name = os.path.join(target.get_staging_path(package_name), "res", "xml", application_name + "_resource.xml") + tools.create_directory_of_file(resource_file_name) + tmpFile = open(resource_file_name, 'w') + tmpFile.write( "\n") + tmpFile.write( "\n") + tmpFile.flush() + tmpFile.close() + # create wallpaper setting if needed (class and config file) + if len(module.get_pkg("ANDROID_WALLPAPER_PROPERTIES"))!=0: + tools.create_directory_of_file(target.path_java_project + application_name + "Settings.java") + debug.print_element("pkg", target.path_java_project + application_name + "Settings.java", "<==", "package configurations") + tmpFile = open(target.path_java_project + application_name + "Settings.java", 'w'); + tmpFile.write( "package " + android_package_name + ";\n") + tmpFile.write( "\n") + tmpFile.write( "import " + android_package_name + ".R;\n") + tmpFile.write( "\n") + tmpFile.write( "import android.content.SharedPreferences;\n") + tmpFile.write( "import android.os.Bundle;\n") + tmpFile.write( "import android.preference.PreferenceActivity;\n") + tmpFile.write( "\n") + tmpFile.write( "public class " + application_name + "Settings extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener\n") + tmpFile.write( "{\n") + tmpFile.write( " @Override protected void onCreate(Bundle icicle) {\n") + tmpFile.write( " super.onCreate(icicle);\n") + tmpFile.write( " getPreferenceManager().setSharedPreferencesName("+ application_name + ".SHARED_PREFS_NAME);\n") + tmpFile.write( " addPreferencesFromResource(R.xml."+ application_name + "_settings);\n") + tmpFile.write( " getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);\n") + tmpFile.write( " }\n") + tmpFile.write( " @Override protected void onResume() {\n") + tmpFile.write( " super.onResume();\n") + tmpFile.write( " }\n") + tmpFile.write( " @Override protected void onDestroy() {\n") + tmpFile.write( " getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);\n") + tmpFile.write( " super.onDestroy();\n") + tmpFile.write( " }\n") + tmpFile.write( " public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) { }\n") + tmpFile.write( "}\n") + tmpFile.flush() + tmpFile.close() + + debug.print_element("pkg", target.get_build_path(package_name) + "/res/xml/" + application_name + "_settings.xml", "<==", "package configurations") + tools.create_directory_of_file(target.get_build_path(package_name) + "/res/xml/" + application_name + "_settings.xml") + tmpFile = open(target.get_build_path(package_name) + "/res/xml/" + application_name + "_settings.xml", 'w'); + tmpFile.write( "\n") + tmpFile.write( "\n") + WALL_haveArray = False + for WALL_type, WALL_key, WALL_title, WALL_summary, WALL_other in module.get_pkg("ANDROID_WALLPAPER_PROPERTIES"): + debug.info("find : '" + WALL_type + "'"); + if WALL_type == "list": + debug.info(" create : LIST"); + tmpFile.write( " \n") + WALL_haveArray=True + elif WALL_type == "bool": + debug.info(" create : CHECKBOX"); + tmpFile.write( " \n") + tmpFile.write( "\n") + tmpFile.flush() + tmpFile.close() + if WALL_haveArray==True: + for WALL_type, WALL_key, WALL_title, WALL_summary, WALL_other in module.get_pkg("ANDROID_WALLPAPER_PROPERTIES"): + if WALL_type == "list": + debug.print_element("pkg", target.get_build_path(package_name) + "/res/values/" + WALL_key + ".xml", "<==", "package configurations") + tools.create_directory_of_file(target.get_build_path(package_name) + "/res/values/" + WALL_key + ".xml") + tmpFile = open(target.get_build_path(package_name) + "/res/values/" + WALL_key + ".xml", 'w'); + tmpFile.write( "\n") + tmpFile.write( "\n") + tmpFile.write( " \n") + for WALL_subKey, WALL_display in WALL_other: + tmpFile.write( " " + WALL_display + "\n") + tmpFile.write( " \n") + tmpFile.write( " \n") + for WALL_subKey, WALL_display in WALL_other: + tmpFile.write( " " + WALL_subKey + "\n") + tmpFile.write( " \n") + tmpFile.write( "\n") + tmpFile.flush() + tmpFile.close() + + + """ + #add properties on wallpaper : + # my_module.add_pkg("ANDROID_WALLPAPER_PROPERTIES", ["list", key, title, summary, [["key","value display"],["key2","value display 2"]]) + # my_module.add_pkg("ANDROID_WALLPAPER_PROPERTIES", ["list", "testpattern", "Select test pattern", "Choose which test pattern to display", [["key","value display"],["key2","value display 2"]]]) + # my_module.add_pkg("ANDROID_WALLPAPER_PROPERTIES", ["bool", key, title, summary, ["enable string", "disable String"]) + # my_module.add_pkg("ANDROID_WALLPAPER_PROPERTIES", ["bool", "movement", "Motion", "Apply movement to test pattern", ["Moving test pattern", "Still test pattern"] + #copy needed resources : + for res_source, res_dest in module.get_pkg("ANDROID_RESOURCES"): + if res_source == "": + continue + tools.copy_file(res_source , target.get_staging_path(package_name) + "/res/" + res_dest + "/" + os.path.basename(res_source), force=True) + """ + """ + # Doc : + # http://asantoso.wordpress.com/2009/09/15/how-to-build-android-application-package-apk-from-the-command-line-using-the-sdk-tools-continuously-integrated-using-cruisecontrol/ + debug.print_element("pkg", "R.java", "<==", "Resources files") + tools.create_directory_of_file(target.get_staging_path(package_name) + "/src/noFile") + androidToolPath = target.path_sdk + "/build-tools/" + # find android tool version + dirnames = tools.get_list_sub_path(androidToolPath) + if len(dirnames) != 1: + debug.error("an error occured when getting the tools for android") + androidToolPath += dirnames[0] + "/" + + adModResoucepath = "" + if module.get_pkg("ADMOD_ID") != None: + adModResoucepath = " -S " + target.path_sdk + "/extras/google/google_play_services/libproject/google-play-services_lib/res/ " + cmdLine = androidToolPath + "aapt p -f " \ + + "-M " + target.get_staging_path(package_name) + "/AndroidManifest.xml " \ + + "-F " + target.get_staging_path(package_name) + "/resources.res " \ + + "-I " + target.path_sdk + "/platforms/android-" + str(target.board_id) + "/android.jar "\ + + "-S " + target.get_staging_path(package_name) + "/res/ " \ + + adModResoucepath \ + + "-J " + target.get_staging_path(package_name) + "/src/ " + multiprocess.run_command(cmdLine) + #aapt package -f -M ${manifest.file} -F ${packaged.resource.file} -I ${path.to.android-jar.library} + # -S ${android-resource-directory} [-m -J ${path.to.output.the.R.java}] + + tools.create_directory_of_file(target.get_staging_path(package_name) + "/build/classes/noFile") + debug.print_element("pkg", "*.class", "<==", "*.java") + # more information with : -Xlint + # + java_file_wrapper + " "\ # this generate ex: out/Android/debug/staging/tethys/src/com/edouarddupin/tethys/edn.java + + #generate android java files: + filesString="" + for element in module.get_pkg("ANDROID_JAVA_FILES"): + if element=="DEFAULT": + filesString += target.path_gale + "/android/src/org/gale/GaleAudioTask.java " + filesString += target.path_gale + "/android/src/org/gale/GaleCallback.java " + filesString += target.path_gale + "/android/src/org/gale/GaleConstants.java " + filesString += target.path_gale + "/android/src/org/gale/Gale.java " + filesString += target.path_gale + "/android/src/org/gale/GaleRendererGL.java " + filesString += target.path_gale + "/android/src/org/gale/GaleSurfaceViewGL.java " + filesString += target.path_gale + "/android/src/org/gale/GaleActivity.java " + filesString += target.path_gale + "/android/src/org/gale/GaleWallpaper.java " + else: + filesString += element + " " + + if in module.get_pkg("ADMOD_ID") != None: + filesString += target.path_sdk + "/extras/google/google_play_services/libproject/google-play-services_lib/src/android/UnusedStub.java " + + if len(module.get_pkg("ANDROID_WALLPAPER_PROPERTIES"))!=0: + filesString += target.path_java_project + application_name + "Settings.java " + + adModJarFile = "" + if module.get_pkg("ADMOD_ID") != None: + adModJarFile = ":" + target.path_sdk + "/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar" + + cmdLine = "javac " \ + + "-d " + target.get_staging_path(package_name) + "/build/classes " \ + + "-classpath " + target.path_sdk + "/platforms/android-" + str(target.board_id) + "/android.jar" \ + + adModJarFile + " " \ + + filesString \ + + java_file_wrapper + " " \ + + target.get_staging_path(package_name) + "/src/R.java " + multiprocess.run_command(cmdLine) + + debug.print_element("pkg", ".dex", "<==", "*.class") + cmdLine = androidToolPath + "dx " \ + + "--dex --no-strict " \ + + "--output=" + target.get_staging_path(package_name) + "/build/" + application_name + ".dex " \ + + target.get_staging_path(package_name) + "/build/classes/ " + + if module.get_pkg("ADMOD_ID") != None: + cmdLine += target.path_sdk + "/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar " + multiprocess.run_command(cmdLine) + """ + return {"files":file_list} + + + diff --git a/command_generateWaylandProtocol.py b/command_generateWaylandProtocol.py new file mode 100644 index 0000000..995ab4c --- /dev/null +++ b/command_generateWaylandProtocol.py @@ -0,0 +1,48 @@ + + +################################################################## +## +## Wayland specific section +## +################################################################## +def tool_generate_wayland_protocol(target, module, package_name): + file_list = [] + debug.warning("------------------------------------------------------------------------") + debug.warning("Generate wayland back elements... '" + str(module) + "'" ) + debug.warning("------------------------------------------------------------------------") + cmd = ["pkg-config", "wayland-protocols", "--variable=pkgdatadir"] + ret = lutinMultiprocess.run_command_direct(tools.list_to_str(cmd)) + if ret == False: + debug.error("Can not execute protocol extraction...") + WAYLAND_PROTOCOLS_DIR = ret + debug.warning("WAYLAND_PROTOCOLS_DIR = " + str(WAYLAND_PROTOCOLS_DIR)) + cmd = ["pkg-config", "--variable=wayland_scanner", "wayland-scanner"] + ret = lutinMultiprocess.run_command_direct(tools.list_to_str(cmd)) + if ret == False: + debug.error("Can not execute protocol extraction...") + WAYLAND_SCANNER = ret + debug.warning("WAYLAND_SCANNER = " + str(WAYLAND_SCANNER)) + XDG_SHELL_PROTOCOL = os.path.join(WAYLAND_PROTOCOLS_DIR, "stable", "xdg-shell", "xdg-shell.xml") + debug.warning("XDG_SHELL_PROTOCOL = " + str(XDG_SHELL_PROTOCOL)) + client_protocol_header = "xdg-shell-client-protocol.h" + client_protocol = "xdg-shell-protocol.c" + # create files + + debug.warning("Generate file = " + client_protocol_header) + tmp_file = "/tmp/gale_wayland.tmp" + cmd = [WAYLAND_SCANNER, "client-header", XDG_SHELL_PROTOCOL, tmp_file] + ret = lutinMultiprocess.run_command_direct(tools.list_to_str(cmd)) + if ret == False: + debug.error("error in generate wayland header code") + tmp_file_data = tools.file_read_data(tmp_file) + module.add_generated_header_file(tmp_file_data, client_protocol_header) + + + debug.warning("Generate file = " + client_protocol) + cmd = [WAYLAND_SCANNER, "private-code", XDG_SHELL_PROTOCOL, tmp_file] + ret = lutinMultiprocess.run_command_direct(tools.list_to_str(cmd)) + if ret == False: + debug.error("Error in wayland generation code of private header protocole") + + tmp_file_data = tools.file_read_data(tmp_file) + module.add_generated_src_file(tmp_file_data, client_protocol)