[Gambas-user] know if program is compiled

Tobias Boege taboege at ...626...
Sun Jun 14 11:58:22 CEST 2015


On Sun, 14 Jun 2015, adamnt42 at ...626... wrote:
> On Sun, 14 Jun 2015 10:19:08 +0200 Marco Ancillotti <gambas at ...3466...> wrote:
> > Hi all,
> > 
> > is there a way to detect from a gambas program if it's running under the 
> > ide or is compiled into a .gambas file ?
> > 
> > thank's in advance.
> > 
> 
> #If Exec
> ' ...  do whatever
> #End
> 
> hth
> bruce
> 

This seems to work but I had to dig into the compiler's source code to
verify it. Then I saw that "gbc3 --help" mentions the "-x" switch which
defines the Exec preprocessor constant [ I will update the documentation
in a second if no one objects ]. But apparently it doesn't do anything
else, like *forcing* the creation of an archive, which is where this method
begins to fail. I can write the following project:

  Public Sub Main()
  #If Exec
    Debug "Exec"
  #Else
    Debug "No Exec"
  #Endif
  End

The IDE is nice in that it uses "gbc3 -x" if and only if it creates an
executable archive (see Project.module:GetCompileCommand) -- then the
Exec flag trick works. But I can go into a terminal and do

  $ cd /tmp/exec-flag  # which is my test project above
  $ gbc3 -ga  # without -x
  $ gba3
  $ ./exec-flag.gambas
  MMain.Main.7: No Exec

but I clearly started an executable archive. On the other side I can do

  $ gbc3 -gax
  $ gbx3
  MMain.Main.5: Exec

but I didn't run it from an executable archive. So, the Exec flag trick
works if you expect people to compile stuff via the IDE.

Also, you should know that there is at least a third way to run a program,
as I have already shown above:

  $ gbx3 /tmp/exec-flag  # if it was compiled before

which runs outside of the IDE but doesn't create a .gambas archive.

So, you might ask yourself now why it is so difficult to determine whether
you run from an executable archive or not. The answer is: you shouldn't
care. Write your program properly :-)

Regads,
Tobi

-- 
"There's an old saying: Don't change anything... ever!" -- Mr. Monk




More information about the User mailing list