comp.lang.ada
 help / color / mirror / Atom feed
* Checking for OS in gnatstudio project file(.gpr)
@ 2020-06-18 11:32 ldries46
  2020-06-18 11:41 ` Mark Lorenzen
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: ldries46 @ 2020-06-18 11:32 UTC (permalink / raw)


I em in neede for a possibility to check within a .gpr file which 
operating system is runnung. Is there a way to do that? So I can use the 
same project file without changing  the .gpr file when compiling a 
program on different OS'ses.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Checking for OS in gnatstudio project file(.gpr)
  2020-06-18 11:32 Checking for OS in gnatstudio project file(.gpr) ldries46
@ 2020-06-18 11:41 ` Mark Lorenzen
  2020-06-18 12:13 ` Dmitry A. Kazakov
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 10+ messages in thread
From: Mark Lorenzen @ 2020-06-18 11:41 UTC (permalink / raw)


On Thursday, June 18, 2020 at 1:33:20 PM UTC+2, ldries46 wrote:
> I em in neede for a possibility to check within a .gpr file which 
> operating system is runnung. Is there a way to do that? So I can use the 
> same project file without changing  the .gpr file when compiling a 
> program on different OS'ses.

Can't you define a scenario variable and set it on the command line? Then it's only the command line that differs between the two builds.

Regards,
Mark L

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Checking for OS in gnatstudio project file(.gpr)
  2020-06-18 11:32 Checking for OS in gnatstudio project file(.gpr) ldries46
  2020-06-18 11:41 ` Mark Lorenzen
@ 2020-06-18 12:13 ` Dmitry A. Kazakov
  2020-06-18 16:44 ` Björn Lundin
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 10+ messages in thread
From: Dmitry A. Kazakov @ 2020-06-18 12:13 UTC (permalink / raw)


On 18/06/2020 13:32, ldries46 wrote:
> I em in neede for a possibility to check within a .gpr file which 
> operating system is runnung. Is there a way to do that? So I can use the 
> same project file without changing  the .gpr file when compiling a 
> program on different OS'ses.

Well, it is a sad story.

Actually there is Project'Target which should give you Linux-esque 
triplet containing architecture and OS. [Isn't it obvious that you need 
three fields for two things?]

Unfortunately it does not work. Sometimes (most of the times?) it is empty.

And even if it worked GRP has no means to split a triplet into parts 
because it has no string indexing. So you will end up with a long case like:

    Target_Triplet := Project'Target;

    case Target_Triplet is
       when "aarch64-linux-gnu" =>
       when "arm-linux" =>
       when "arm-linux-gnueabi" =>
       when "arm-linux-gnueabihf" =>
       when "x86_64-apple-darwin" =>
       when "x86_64-freebsd" =>

and so on.

So you will be better on with a scenario variable.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Checking for OS in gnatstudio project file(.gpr)
  2020-06-18 11:32 Checking for OS in gnatstudio project file(.gpr) ldries46
  2020-06-18 11:41 ` Mark Lorenzen
  2020-06-18 12:13 ` Dmitry A. Kazakov
@ 2020-06-18 16:44 ` Björn Lundin
  2020-06-19  8:01 ` ldries46
  2020-06-19 16:43 ` Simon Wright
  4 siblings, 0 replies; 10+ messages in thread
From: Björn Lundin @ 2020-06-18 16:44 UTC (permalink / raw)


Den 2020-06-18 kl. 13:32, skrev ldries46:
> I em in neede for a possibility to check within a .gpr file which 
> operating system is runnung. Is there a way to do that? So I can use the 
> same project file without changing  the .gpr file when compiling a 
> program on different OS'ses.
As others have replied you can use scenario variables.
And they are passed from commandline.
But gprbuild looks for variables passed in with -X like -XVARIBLE=Value
however if that is not found it will look for that name amomg the 
environent variables

so I create env vars for current os/arch/db in the os
and test on every combination needed
db_libs := ();
case db is
   when Oracle     => db_libs := db_lib1;
   when Postgresql => db_libs := db_lib2;
   when sqlserver  => db_libs := db_lib3;
end case


other_libs := ():
case os_arch is
  when AIX_PPC   => other_libs := lib1;
  when Linux_x64 => other_libs := lib2;
  when Linux_arm => other_libs := lib3;
  when Win_64    => other_libs := lib4;
end case

and so on

the use db_libs and other-libs elsewhere in the gprfile



-- 
Björn

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Checking for OS in gnatstudio project file(.gpr)
  2020-06-18 11:32 Checking for OS in gnatstudio project file(.gpr) ldries46
                   ` (2 preceding siblings ...)
  2020-06-18 16:44 ` Björn Lundin
@ 2020-06-19  8:01 ` ldries46
  2020-06-19  9:11   ` ldries46
  2020-06-19  9:11   ` Mark Lorenzen
  2020-06-19 16:43 ` Simon Wright
  4 siblings, 2 replies; 10+ messages in thread
From: ldries46 @ 2020-06-19  8:01 UTC (permalink / raw)


At this point I found within my environment variables on Windows:
OS=Windows_NT so I created the following in my .gpr file (I have not 
yest looked in Linux, perhaps I shoud add OS=Linux there)

    type OS_Kind is
       ("Windows_NT", "Linux");
    OS : OS_Kind := external("OS", "Windows_NT");

    case OS is
       when "Windows_NT" =>
          for Object_Dir use "./build";
          for Exec_Dir   use ".";
       when "Linux" =>
          for Object_Dir use "./build";
          for Exec_Dir   use ".";
          for Casing     use "mixedcase";
    end case;

The problem now is the casing, that seems not to be available on 
Windows. In Linux it looks like I need it because the standard there is 
"lowercase" Is there an overall .gpr file that all project use in which 
I can add or change that ?


Op 18-6-2020 om 13:32 schreef ldries46:
> I em in neede for a possibility to check within a .gpr file which 
> operating system is runnung. Is there a way to do that? So I can use 
> the same project file without changing  the .gpr file when compiling a 
> program on different OS'ses.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Checking for OS in gnatstudio project file(.gpr)
  2020-06-19  8:01 ` ldries46
@ 2020-06-19  9:11   ` ldries46
  2020-06-19  9:11   ` Mark Lorenzen
  1 sibling, 0 replies; 10+ messages in thread
From: ldries46 @ 2020-06-19  9:11 UTC (permalink / raw)


In the mean time still found the solution. Casing should be in a package 
which makes an extra case neccesary.

Op 19-6-2020 om 10:01 schreef ldries46:
> At this point I found within my environment variables on Windows:
> OS=Windows_NT so I created the following in my .gpr file (I have not 
> yest looked in Linux, perhaps I shoud add OS=Linux there)
>
>    type OS_Kind is
>       ("Windows_NT", "Linux");
>    OS : OS_Kind := external("OS", "Windows_NT");
>
>    case OS is
>       when "Windows_NT" =>
>          for Object_Dir use "./build";
>          for Exec_Dir   use ".";
>       when "Linux" =>
>          for Object_Dir use "./build";
>          for Exec_Dir   use ".";
>          for Casing     use "mixedcase";
>    end case;
>
> The problem now is the casing, that seems not to be available on 
> Windows. In Linux it looks like I need it because the standard there 
> is "lowercase" Is there an overall .gpr file that all project use in 
> which I can add or change that ?
>
>
> Op 18-6-2020 om 13:32 schreef ldries46:
>> I em in neede for a possibility to check within a .gpr file which 
>> operating system is runnung. Is there a way to do that? So I can use 
>> the same project file without changing  the .gpr file when compiling 
>> a program on different OS'ses.
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Checking for OS in gnatstudio project file(.gpr)
  2020-06-19  8:01 ` ldries46
  2020-06-19  9:11   ` ldries46
@ 2020-06-19  9:11   ` Mark Lorenzen
  2020-06-19 16:29     ` Simon Wright
  1 sibling, 1 reply; 10+ messages in thread
From: Mark Lorenzen @ 2020-06-19  9:11 UTC (permalink / raw)


On Friday, June 19, 2020 at 10:01:59 AM UTC+2, ldries46 wrote:
> At this point I found within my environment variables on Windows:
> OS=Windows_NT so I created the following in my .gpr file (I have not 
> yest looked in Linux, perhaps I shoud add OS=Linux there)
> 
>     type OS_Kind is
>        ("Windows_NT", "Linux");
>     OS : OS_Kind := external("OS", "Windows_NT");
> 
>     case OS is
>        when "Windows_NT" =>
>           for Object_Dir use "./build";
>           for Exec_Dir   use ".";
>        when "Linux" =>
>           for Object_Dir use "./build";
>           for Exec_Dir   use ".";
>           for Casing     use "mixedcase";
>     end case;
> 
> The problem now is the casing, that seems not to be available on 
> Windows. In Linux it looks like I need it because the standard there is 
> "lowercase" Is there an overall .gpr file that all project use in which 
> I can add or change that ?

Casing of what? Do you e.g. have directories with mixed casing?

It seems that your Object_Dir and Exec_Dir are the same on the two platforms. Do you have file names with mixed case?

Regards,
Mark L

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Checking for OS in gnatstudio project file(.gpr)
  2020-06-19  9:11   ` Mark Lorenzen
@ 2020-06-19 16:29     ` Simon Wright
  2020-06-20  9:02       ` ldries46
  0 siblings, 1 reply; 10+ messages in thread
From: Simon Wright @ 2020-06-19 16:29 UTC (permalink / raw)


Mark Lorenzen <mark.lorenzen@gmail.com> writes:

> Casing of what? Do you e.g. have directories with mixed casing?
>
> It seems that your Object_Dir and Exec_Dir are the same on the two
> platforms. Do you have file names with mixed case?

Casing is an attribute of package Naming.

It doesn't matter on Windows (or macOS), but it seems to me that if your
compiler is GNAT you might as well go with the flow and make all your
Ada source file names lower case! Not really that hard a mindset to get
into.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Checking for OS in gnatstudio project file(.gpr)
  2020-06-18 11:32 Checking for OS in gnatstudio project file(.gpr) ldries46
                   ` (3 preceding siblings ...)
  2020-06-19  8:01 ` ldries46
@ 2020-06-19 16:43 ` Simon Wright
  4 siblings, 0 replies; 10+ messages in thread
From: Simon Wright @ 2020-06-19 16:43 UTC (permalink / raw)


ldries46 <bertus.dries@planet.nl> writes:

> I em in neede for a possibility to check within a .gpr file which
> operating system is runnung. Is there a way to do that? So I can use
> the same project file without changing  the .gpr file when compiling a
> program on different OS'ses.

Alire settled on this[1] in an aggregate project after some
heartsearching:

   Host_OS := external ("OS", "default");
   --  On Windows an OS environment variable is defined, we can use it to
   --  determine if we are compiling on Windows.
   --
   --  On macOS, the nearest equivalent is OSTYPE; however this is
   --  e.g. "darwin18", so not useful here. Set "macOS" by hand.

   --  ALIRE_OS is used in alire_common.gpr.
   --  GNATCOLL_OS is used in gnatcoll.gpr.
   case Host_OS is
      when "Windows_NT" =>
         for External ("ALIRE_OS") use "windows";
         for External ("GNATCOLL_OS") use "windows";
      when "macOS"      =>
         for External ("ALIRE_OS") use "osx";
         for External ("GNATCOLL_OS") use "osx";
      when others       =>
         for External ("ALIRE_OS") use "unix";
         for External ("GNATCOLL_OS") use "unix";
   end case;

but I've had a lot of trouble with aggregate projects (I don't think
I've grasped what the use cases are). As I remember, it was package
Builder that was the issue.

[1] https://github.com/alire-project/alire/blob/master/alr_env.gpr#L22

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Checking for OS in gnatstudio project file(.gpr)
  2020-06-19 16:29     ` Simon Wright
@ 2020-06-20  9:02       ` ldries46
  0 siblings, 0 replies; 10+ messages in thread
From: ldries46 @ 2020-06-20  9:02 UTC (permalink / raw)


Op 19-6-2020 om 18:29 schreef Simon Wright:
> Mark Lorenzen <mark.lorenzen@gmail.com> writes:
>
>> Casing of what? Do you e.g. have directories with mixed casing?
>>
>> It seems that your Object_Dir and Exec_Dir are the same on the two
>> platforms. Do you have file names with mixed case?
> Casing is an attribute of package Naming.
>
> It doesn't matter on Windows (or macOS), but it seems to me that if your
> compiler is GNAT you might as well go with the flow and make all your
> Ada source file names lower case! Not really that hard a mindset to get
> into.
I didn't correctly understood the way how to use Casing.  That is needed 
to be in the package Naming. In the meantime I have corrected that and 
now I it works correctly.
No I want to use filenames with a mixed casing because I find then 
easier to read or to recognize.
For instance using a file name of  "Name_Main_CB" is better to recognize 
(in my opinion) as "name_main_cb" as the file in which the package of 
the Callbacks of the Initiation part of the main program is written.

At the moment I originally posted this point I didn't realized that the 
standard on Windows is "\" and on Linux "/" although Windows recognizes 
both. But let us be strict.

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2020-06-20  9:02 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-18 11:32 Checking for OS in gnatstudio project file(.gpr) ldries46
2020-06-18 11:41 ` Mark Lorenzen
2020-06-18 12:13 ` Dmitry A. Kazakov
2020-06-18 16:44 ` Björn Lundin
2020-06-19  8:01 ` ldries46
2020-06-19  9:11   ` ldries46
2020-06-19  9:11   ` Mark Lorenzen
2020-06-19 16:29     ` Simon Wright
2020-06-20  9:02       ` ldries46
2020-06-19 16:43 ` Simon Wright

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox