Difference between revisions of "GSoC - Windows Support"

From Liberty Eiffel Wiki
Jump to navigation Jump to search
m
 
(10 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
== Liberty Eiffel meets Windows ==
 
== Liberty Eiffel meets Windows ==
   
  +
* [https://drive.google.com/file/d/0BzWWQWj9idKcNTFrTnFfRmQ1LXM/edit Link to Installer application]
 
  +
=== New small footprint installation method using Tiny-C ===
  +
Since October 2024, an installation script exists that loosely mimics the 'install.sh' script that is used on Linux based machines. The installation process is documented on a separate page: [[Installing on Windows using the Tiny-C compiler]]
  +
This Windows cmd-script only assumes that you have a Tiny-C compiler installed - no need to download and run external installation packages.
  +
  +
  +
  +
=== 2016 GSOC effort: ===
  +
 
* [https://github.com/petr00/Liberty-Eiffel-Windows Link to repository]
 
* [https://github.com/petr00/Liberty-Eiffel-Windows Link to repository]
   
Line 16: Line 24:
   
 
----
 
----
 
   
 
== '''Progress''' ==
 
== '''Progress''' ==
   
   
I've created a working application that replicates all the facilities, but one, that Liberty Eiffel offers in POSIX systems,
+
I've created a working installer application that replicates all the facilities, but one, that Liberty Eiffel offers in POSIX systems,
in Windows Environment. The only facility that I didn't reproduce caused the following tools : eiffeltest_server and wrappers_generator,
+
in Windows Environment. The only facility that I didn't reproduce, '''net cluster''', caused the eiffeltest_server tool to be inoperable.
  +
to be unoperable.
 
This issue comes from the fact that I was not able to port the functions from net plugin.
 
   
   
Line 45: Line 51:
 
* [https://github.com/petr00/Liberty-Eiffel-Windows/blob/master/nsis-installer/liberty/install.bat\set_path.cmd set_path.cmd], simple utility used to create the Liberty Eiffel configuration file, called by installer.nsi .
 
* [https://github.com/petr00/Liberty-Eiffel-Windows/blob/master/nsis-installer/liberty/install.bat\set_path.cmd set_path.cmd], simple utility used to create the Liberty Eiffel configuration file, called by installer.nsi .
   
* [https://github.com/petr00/Liberty-Eiffel-Windows/tree/master/nsis-installer installer.nsi], a nicely wrapped NSIS installer + uninstaller, that follows the best practices : required executionlevel, write/delete registers, function to create/delete environment variable for the binaries created from the compiled Liberty Eiffel tools, has a function that reads the product version of the Liberty Eiffel install application and downloads from it's official website documentation regarding that patch( at the moment the site's structure does not allow that, but the function will be used in the near future, the installers now is only downloading from a plain link), an option for downloading mingw-w64, custom images etc.
+
* [https://github.com/petr00/Liberty-Eiffel-Windows/tree/master/nsis-installer/installer.nsi installer.nsi], a nicely wrapped NSIS installer + uninstaller, that follows the best practices : required executionlevel, write/delete registers, function to create/delete environment variable for the binaries created from the compiled Liberty Eiffel tools, has a function that reads the product version of the Liberty Eiffel install application and downloads from it's official website documentation regarding that patch( at the moment the site's structure does not allow that, but the function will be used in the near future, the installers now is only downloading from a plain link), an option for downloading mingw-w64, custom images etc.
   
   
* A part of liberty/se_make.bat([https://github.com/LibertyEiffel/Liberty/blob/master/work/se_make.sh inspired from /work/se_make.sh]), no longer needed for this patch, therefore I did not completed all of it.
+
* A part of liberty/[https://github.com/petr00/Liberty-Eiffel-Windows/blob/master/nsis-installer/liberty/se_make.bat se_make.bat](inspired from [https://github.com/LibertyEiffel/Liberty/blob/master/work/se_make.sh /work/se_make.sh]), no longer needed for this patch, therefore I did not completed all of it.
   
   
Line 63: Line 69:
   
 
The reason was flexibility: the installer with mingw attached would be bigger with around 300mb.
 
The reason was flexibility: the installer with mingw attached would be bigger with around 300mb.
After serching, I found out that there are not offline installers for mingw, but online versions of only around 200kb.
+
After searching, I found out that there are not offline installers for mingw available, but online versions of only around 200kb.
Therefore I only created one version that has the option to select to call mingw's installer and downloads online.
+
Therefore I only created one version of Liberty Eiffel installer that offers the user the ability to download mingw via calling mingw's online installer.
   
   
Line 70: Line 76:
   
   
The "T stages" refers to compiling smarteiffel's base code (136 .c files) and create an application from those, and from that application other
+
The "T stages" refers to compiling Liberty Eiffel's base code (currently 136 C-files created by the Liberty Eiffel compiler) and create a binary from these, and with that binary the same
136 .c files, and so on for three times. After three such processes, if the resulting applications are binary indentical the installer proceeds
+
136 C-files (that represent the core of smarteiffel) get compiled again, and so on for three times. After three such processes, if the resulting applications are binary indentical to the previous compile, the installer proceeds further to the [[http://wiki.liberty-eiffel.org/index.php/GSoC_-_Windows_Support#Progress tools compilation]].
further to the tools compilation.
 
   
 
----
 
----
   
   
The NSIS installer does just as mentioned above in the Progress section and has incorporated an uninstaller that uninstalls exactly what the installer created.
+
The NSIS installer does just as mentioned [[http://wiki.liberty-eiffel.org/index.php/GSoC_-_Windows_Support#Progress above]] and has incorporated an uninstaller that uninstalls exactly what the installer created.
 
 
 
   
 
== '''Repository structure''' ==
 
== '''Repository structure''' ==

Latest revision as of 10:27, 28 October 2024

Liberty Eiffel meets Windows

New small footprint installation method using Tiny-C

Since October 2024, an installation script exists that loosely mimics the 'install.sh' script that is used on Linux based machines. The installation process is documented on a separate page: Installing on Windows using the Tiny-C compiler This Windows cmd-script only assumes that you have a Tiny-C compiler installed - no need to download and run external installation packages.


2016 GSOC effort:




Final Goal

   Bootstrap the Liberty-Eiffel programming language (compiler,classes, functions etc.)
   from the UNIX/LINUX environment to the WINDOWS environment and wrap it into a nice installer.

Progress

I've created a working installer application that replicates all the facilities, but one, that Liberty Eiffel offers in POSIX systems, in Windows Environment. The only facility that I didn't reproduce, net cluster, caused the eiffeltest_server tool to be inoperable.




The other tools (se, clean, ace_check, eiffeltest, mock, eiffeltest_ng, pretty, short, class_check, finder, eiffeldoc, extract_internals) work just fine together will all the other plugins and all functionalities.




What I coded:

  • install.bat, which creates the "T stages" and compiles *almost* all the tools, creates the configuration file and the binaries from the tools.
  • set_path.cmd, simple utility used to create the Liberty Eiffel configuration file, called by installer.nsi .
  • installer.nsi, a nicely wrapped NSIS installer + uninstaller, that follows the best practices : required executionlevel, write/delete registers, function to create/delete environment variable for the binaries created from the compiled Liberty Eiffel tools, has a function that reads the product version of the Liberty Eiffel install application and downloads from it's official website documentation regarding that patch( at the moment the site's structure does not allow that, but the function will be used in the near future, the installers now is only downloading from a plain link), an option for downloading mingw-w64, custom images etc.


  • A part of liberty/se_make.bat(inspired from /work/se_make.sh), no longer needed for this patch, therefore I did not completed all of it.




General

The original main goal was to create two versions of an installer application: one that assumes that the end-user already has mingw-w64 installed, and one that installs mingw-w64 for the user.

The reason was flexibility: the installer with mingw attached would be bigger with around 300mb. After searching, I found out that there are not offline installers for mingw available, but online versions of only around 200kb. Therefore I only created one version of Liberty Eiffel installer that offers the user the ability to download mingw via calling mingw's online installer.




The "T stages" refers to compiling Liberty Eiffel's base code (currently 136 C-files created by the Liberty Eiffel compiler) and create a binary from these, and with that binary the same 136 C-files (that represent the core of smarteiffel) get compiled again, and so on for three times. After three such processes, if the resulting applications are binary indentical to the previous compile, the installer proceeds further to the [tools compilation].



The NSIS installer does just as mentioned [above] and has incorporated an uninstaller that uninstalls exactly what the installer created.

Repository structure

Please note that I did not want to create a very long post about all the details of installer.nsi, but you can check some of those here.




From this repository only the files mentioned [above], 'What I coded' paragraph were made by me, plus the images. The other files are duplicates from Liberty Eiffel's core structure(only the most relevant files) to create an ease of use of the installer script for testing purposes.