diff --git a/index/alire-index-apq.ads b/index/alire-index-apq.ads index a47fa145..27e625d7 100644 --- a/index/alire-index-apq.ads +++ b/index/alire-index-apq.ads @@ -12,7 +12,7 @@ package Alire.Index.APQ is Git (Repo, "3b5b4b99f528f853e02abf239da7db3d8c9962b4"), Properties => GPR_File ("apq.gpr") and - GPR_File ("samples" / "apq-samples.gpr") and + GPR_File ("samples/apq-samples.gpr") and GPR_Scenario ("OS", "Windows_NT" or "GNU/Linux" or "Darwin") and GPR_Scenario ("DEBUG", "true" or "false") and diff --git a/index/alire-index-aunit.ads b/index/alire-index-aunit.ads new file mode 100644 index 00000000..cf21d50e --- /dev/null +++ b/index/alire-index-aunit.ads @@ -0,0 +1,43 @@ +package Alire.Index.AUnit is + + Prj_Name : constant Project_Name := "aunit"; + Prj_Desc : constant Project_Description := "Ada unit test framework"; + Prj_Repo : constant URL := "https://github.com/alire-project/libaunit.git"; + + Prj_Maintainer : constant String := "AdaCore"; + Prj_Website : constant URL := "https://www.adacore.com/download/more"; + + V_2017 : constant Release := + Register (Prj_Name, + V ("2017"), + Prj_Desc, + Git (Prj_Repo, "9cc524fe3c3cb3d857e6d1a38defbf58af88f7f9"), + Properties => + GPR_File ("lib/gnat/aunit.gpr") and + GPR_File ("test/aunit_tests.gpr") and + + GPR_File ("examples/calculator/harness.gpr") and + GPR_File ("examples/calculator/tested_lib/testlib.gpr") and + GPR_File ("examples/failures/harness.gpr") and + GPR_File ("examples/failures/tested_lib/testlib.gpr") and + GPR_File ("examples/liskov/harness.gpr") and + GPR_File ("examples/liskov/tested_lib/testlib.gpr") and + GPR_File ("examples/simple_test/harness.gpr") and + GPR_File ("examples/simple_test/tested_lib/testlib.gpr") and + GPR_File ("examples/test_caller/harness/harness.gpr") and + GPR_File ("examples/test_caller/tested_lib/testlib.gpr") and + GPR_File ("examples/test_fixture/harness.gpr") and + GPR_File ("examples/test_fixture/tested_lib/testlib.gpr") and + + Executable ("aunit_harness") and + Executable ("run-ppc-elf") and + Executable ("test_liskov") and + Executable ("test_calculator") and + Executable ("test_math") and + + Maintainer (Prj_Maintainer) and + Website (Prj_Website) and + License (GPL_3_0) + ); + +end Alire.Index.AUnit; diff --git a/index/alire-index-dak.ads b/index/alire-index-dak.ads index ded7ee03..1eba8a7f 100644 --- a/index/alire-index-dak.ads +++ b/index/alire-index-dak.ads @@ -27,7 +27,7 @@ package Alire.Index.DAK is Properties => GPR_File ("strings_edit.gpr") and - GPR_File ("test_strings_edit" / "strings_edit-test.gpr") and + GPR_File ("test_strings_edit/strings_edit-test.gpr") and GPR_Scenario ("Legacy", "Ada95" or "Ada2005" or "Ada2012") and GPR_Scenario ("Development", "Debug" or "Release") and @@ -49,7 +49,7 @@ package Alire.Index.DAK is Properties => GPR_File ("tables.gpr") and - GPR_File ("test_tables" / "tables-test.gpr") and + GPR_File ("test_tables/tables-test.gpr") and GPR_Scenario ("Legacy", "Ada95" or "Ada2005" or "Ada2012") and GPR_Scenario ("Development", "Debug" or "Release") and @@ -72,7 +72,7 @@ package Alire.Index.DAK is Properties => GPR_File ("components.gpr") and - GPR_File ("test_components" / "components-tests.gpr") and + GPR_File ("test_components/components-tests.gpr") and GPR_Scenario ("Atomic_Access", "Pragma-atomic" or "GCC-built-ins" or "GCC-long-offsets") and GPR_Scenario ("Tasking", "Multiple" or "Single") and @@ -124,7 +124,7 @@ package Alire.Index.DAK is Properties => GPR_File ("components-ntp.gpr") and - GPR_File ("test_components" / "components-ntp-test_ntp.gpr") and + GPR_File ("test_components/components-ntp-test_ntp.gpr") and Executable ("test_ntp") and @@ -143,8 +143,8 @@ package Alire.Index.DAK is Properties => GPR_File ("components-sqlite.gpr") and - GPR_File ("test_components" / "components-sqlite-benchmark_tests.gpr") and - GPR_File ("test_components" / "components-sqlite-sqlite_persistence_tests.gpr") and + GPR_File ("test_components/components-sqlite-benchmark_tests.gpr") and + GPR_File ("test_components/components-sqlite-sqlite_persistence_tests.gpr") and Executable ("test_sqlite_benchmark") and Executable ("test_sqlite_persistence") and @@ -173,16 +173,16 @@ package Alire.Index.DAK is GPR_File ("components-connections_server-mqtt.gpr") and GPR_File ("components-connections_server-smtp.gpr") and -- Test projects - GPR_File ("test_components" / "components-connections_server-elv_max_cube-test_elv_max_cube_client.gpr") and - GPR_File ("test_components" / "components-connections_server-http_server-test_http_server.gpr") and - GPR_File ("test_components" / "components-connections_server-modbus-test_modbus_client.gpr") and - GPR_File ("test_components" / "components-connections_server-mqtt-test_mqtt.gpr") and - GPR_File ("test_components" / "components-connections_server-test_data_server.gpr") and - GPR_File ("test_components" / "components-connections_server-test_echo_client_async.gpr") and - GPR_File ("test_components" / "components-connections_server-test_echo_client.gpr") and - GPR_File ("test_components" / "components-connections_server-test_echo_server.gpr") and - GPR_File ("test_components" / "components-connections_server-test_websockets_mqtt.gpr") and - GPR_File ("test_components" / "components-test_sqlite_browser.gpr") and + GPR_File ("test_components/components-connections_server-elv_max_cube-test_elv_max_cube_client.gpr") and + GPR_File ("test_components/components-connections_server-http_server-test_http_server.gpr") and + GPR_File ("test_components/components-connections_server-modbus-test_modbus_client.gpr") and + GPR_File ("test_components/components-connections_server-mqtt-test_mqtt.gpr") and + GPR_File ("test_components/components-connections_server-test_data_server.gpr") and + GPR_File ("test_components/components-connections_server-test_echo_client_async.gpr") and + GPR_File ("test_components/components-connections_server-test_echo_client.gpr") and + GPR_File ("test_components/components-connections_server-test_echo_server.gpr") and + GPR_File ("test_components/components-connections_server-test_websockets_mqtt.gpr") and + GPR_File ("test_components/components-test_sqlite_browser.gpr") and Executable ("test_data_server") and Executable ("test_echo_client") and @@ -218,8 +218,8 @@ package Alire.Index.DAK is Properties => GPR_File ("components-connections_server-secure.gpr") and GPR_File ("components-gnutls.gpr") and - GPR_File ("test_components" / "components-connections_server-http_server-test_https_server.gpr") and - GPR_File ("test_components" / "components-connections_server-smtp-test_smtp.gpr") and + GPR_File ("test_components/components-connections_server-http_server-test_https_server.gpr") and + GPR_File ("test_components/components-connections_server-smtp-test_smtp.gpr") and Executable ("test_https_client") and Executable ("test_https_server") and @@ -241,7 +241,7 @@ package Alire.Index.DAK is Properties => GPR_File ("components-odbc.gpr") and - GPR_File ("test_components" / "components-odbc-odbc_bindings_tests.gpr") and + GPR_File ("test_components/components-odbc-odbc_bindings_tests.gpr") and On_Condition (System_Is (GNU_Linux), diff --git a/index/alire-index-libadacrypt.ads b/index/alire-index-libadacrypt.ads index 6a7882f3..16846e7d 100644 --- a/index/alire-index-libadacrypt.ads +++ b/index/alire-index-libadacrypt.ads @@ -1,8 +1,10 @@ +with Alire.Index.AUnit; + package Alire.Index.Libadacrypt is Prj_Name : constant Project_Name := "libadacrypt"; Prj_Desc : constant Project_Description := "A crypto library for Ada with a nice API"; - Prj_Repo : constant URL := "https://github.com/cforler/Ada-Crypto-Library.git"; + Prj_Repo : constant URL := "https://github.com/alire-project/Ada-Crypto-Library.git"; Prj_Author : constant String := "Christian Forler"; @@ -10,11 +12,32 @@ package Alire.Index.Libadacrypt is Register (Prj_Name, V ("0.8.7"), Prj_Desc, - Git (Prj_Repo, "06b4907c6ae6dcdce62339ff8fd2913d7bbbc0d9"), + Git (Prj_Repo, "33d15283abbc6d8a51d717de2bd822e026710c0d"), + + Dependencies => + Within_Major (AUnit.V_2017), + + Properties => + GPR_File ("libadacrypt.gpr") and + GPR_File ("acltest.gpr") and + + On_Condition + (System_Is (GNU_Linux), + GPR_Extra_Config ("-Xsystem=unix")) and + On_Condition + (System_Is (Windows), + GPR_Extra_Config ("-Xsystem=windows")) and + + GPR_Scenario ("system", "unix" or "windows") and + GPR_Scenario ("mode", "debug" or "release") and + + Executable ("test-asymmetric_ciphers") and + Executable ("test-big_number") and + Executable ("test-kdf") and + Executable ("test-symmetric_ciphers") and + Executable ("test-tests") and - Properties => Author (Prj_Author) and - License (GMGPL_2_0) and License (GMGPL_3_0) ); diff --git a/src/alire-index.adb b/src/alire-index.adb index 7ba8a21f..2f0eea33 100644 --- a/src/alire-index.adb +++ b/src/alire-index.adb @@ -1,3 +1,6 @@ +with Ada.Directories; +with Ada.Strings.Maps; + package body Alire.Index is use all type Version; @@ -68,4 +71,24 @@ package body Alire.Index is end return; end Register; + --------------- + -- To_Native -- + --------------- + + Dir_Seps : constant Ada.Strings.Maps.Character_Set := Ada.Strings.Maps.To_Set ("/\"); + + function To_Native (Path : Platform_Independent_Path) return String is + use Ada.Strings.Maps; + begin + for I in Path'Range loop + if Is_In (Path (I), Dir_Seps) then + return Ada.Directories.Compose + (Path (Path'First .. I - 1), + To_Native (Path (I + 1 .. Path'Last))); + end if; + end loop; + + return Path; + end To_Native; + end Alire.Index; diff --git a/src/alire-index.ads b/src/alire-index.ads index 2001a749..c1df3fc0 100644 --- a/src/alire-index.ads +++ b/src/alire-index.ads @@ -1,7 +1,5 @@ private with Alire_Early_Elaboration; pragma Unreferenced (Alire_Early_Elaboration); -with Ada.Directories; - with Alire.Conditional; with Alire.Containers; with Alire.Dependencies.Vectors; @@ -48,6 +46,13 @@ package Alire.Index is -- Requisites are properties that dependencies have to fulfill, not used yet. -- Available_On are properties the platform has to fulfill. + subtype Platform_Independent_Path is String with Dynamic_Predicate => + (for all C of Platform_Independent_Path => C /= '\'); + -- This type is used to ensure that folder separators are externally always '/', + -- and internally properly converted to the platform one + + function To_Native (Path : Platform_Independent_Path) return String; + --------------------- -- BASIC QUERIES -- --------------------- @@ -179,8 +184,8 @@ package Alire.Index is function Author is new PL.Cond_New_Label (Properties.Labeled.Author); function Comment is new PL.Cond_New_Label (Properties.Labeled.Comment); function Executable is new PL.Cond_New_Label (Properties.Labeled.Executable); - function GPR_Extra_Config is new PL.Cond_New_Label (Properties.Labeled.GPR_Extra_Config); - function GPR_File is new PL.Cond_New_Label (Properties.Labeled.GPR_File); + function GPR_Extra_Config is new PL.Cond_New_Label (Properties.Labeled.GPR_Extra_Config); + function GPR_File (File : Platform_Independent_Path) return Release_Properties; function Maintainer is new PL.Cond_New_Label (Properties.Labeled.Maintainer); function Website is new PL.Cond_New_Label (Properties.Labeled.Website); @@ -227,14 +232,6 @@ package Alire.Index is function Word_Size_Is (V : Platforms.Word_Sizes) return Requisites.Tree renames Requisites.Platform.Word_Size_Is; - --- function Version_Is (V : Platforms.Versions) return - - -- Other useful functions - - function "/" (L, R : String) return String is (Ada.Directories.Compose (L, R)); - -- Path composition. - -- FIXME: hardcoded path separators shouldn't reach the index, not sure how to force-prevent this... ---------------------- -- Set_Root_Project -- @@ -247,5 +244,12 @@ package Alire.Index is -- This function must be called in the working project alire file. -- Otherwise alr does not know what's the current project, and its version and dependencies -- The returned Release is the same; this is just a trick to be able to use it in an spec file. + +private + + function GPR_File_Unsafe is new PL.Cond_New_Label (Properties.Labeled.GPR_File); + + function GPR_File (File : Platform_Independent_Path) return Release_Properties + renames GPR_File_Unsafe; end Alire.Index; diff --git a/src/alire-releases.ads b/src/alire-releases.ads index 175d3595..87971c2b 100644 --- a/src/alire-releases.ads +++ b/src/alire-releases.ads @@ -16,13 +16,13 @@ package Alire.Releases with Preelaborate is type Release (<>) is tagged private; - function New_Release (Name : Project_Name; - Description : Project_Description; - Version : Semantic_Versioning.Version; - Origin : Origins.Origin; + function New_Release (Name : Project_Name; + Description : Project_Description; + Version : Semantic_Versioning.Version; + Origin : Origins.Origin; Dependencies : Conditional.Dependencies; - Properties : Conditional.Properties; - Available : Alire.Requisites.Tree) return Release; + Properties : Conditional.Properties; + Available : Alire.Requisites.Tree) return Release; function "<" (L, R : Release) return Boolean; @@ -56,9 +56,9 @@ package Alire.Releases with Preelaborate is -- Explicitly declared ones, or if default one if none declared -- Under some conditions (usually current platform) - function Image (R : Release) return Path_String; + function Image (R : Release) return Folder_String; -- Unique string built as name_version_id - function Unique_Folder (R : Release) return Path_String renames Image; + function Unique_Folder (R : Release) return Folder_String renames Image; function Labeled_Properties (R : Release; P : Properties.Vector; Label : Properties.Labeled.Labels) return Utils.String_Vector; @@ -113,13 +113,13 @@ private use all type Conditional.Properties; - function New_Release (Name : Project_Name; - Description : Project_Description; - Version : Semantic_Versioning.Version; - Origin : Origins.Origin; + function New_Release (Name : Project_Name; + Description : Project_Description; + Version : Semantic_Versioning.Version; + Origin : Origins.Origin; Dependencies : Conditional.Dependencies; - Properties : Conditional.Properties; - Available : Alire.Requisites.Tree) return Release is + Properties : Conditional.Properties; + Available : Alire.Requisites.Tree) return Release is (Name'Length, Description'Length, Name, Description, @@ -157,7 +157,7 @@ private (R.Name & OS_Lib.Exe_Suffix); use all type Origins.Kinds; - function Image (R : Release) return Path_String is + function Image (R : Release) return Folder_String is (R.Name & "_" & Image (R.Version) & "_" & (case R.Origin.Kind is diff --git a/src/alire.ads b/src/alire.ads index 40a40f30..e9e28c36 100644 --- a/src/alire.ads +++ b/src/alire.ads @@ -22,9 +22,10 @@ package Alire with Preelaborate is subtype Project_Description is String with Dynamic_Predicate => Project_Description'Length <= Max_Description_Length; - subtype Path_String is String with Dynamic_Predicate => - Path_String'Length > 0 and then - (for all C of Path_String => C in 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '.'); + subtype Folder_String is String with Dynamic_Predicate => + Folder_String'Length > 0 and then + (for all C of Folder_String => C in 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '.'); + -- Used for cross-platform folder names --------------- -- LOGGING --