sketchucation logo sketchucation
    • Login
    ℹ️ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info

    [Tutorial] SketchUp Ruby C Extension

    Scheduled Pinned Locked Moved Developers' Forum
    176 Posts 16 Posters 25.9k Views 16 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Dan RathbunD Offline
      Dan Rathbun
      last edited by

      Don't forget the "help" topic here:
      [Info] C/C++ Ruby extensions & SketchUp plugins
      .. and read Adan Nelson's posts (links on the above list.)

      I'm not here much anymore.

      1 Reply Last reply Reply Quote 0
      • Dan RathbunD Offline
        Dan Rathbun
        last edited by

        from the info file "win32.readme" in the Ruby C source:
        @unknownuser said:

        You can NOT use a path name [that] contains any white space characters as
        the ruby source directory, this restriction comes from the behavior of include directives of NMAKE.
        (- you may call it a bug. -)

        I'm not here much anymore.

        1 Reply Last reply Reply Quote 0
        • tbdT Offline
          tbd
          last edited by

          Thom: #pragma comment(lib, "*.lib") adds the libraries to the link phase (that hold imports and functions code)

          it was a way to make sure that it will compile even if you create a new project and don't use in mine in PellesC.

          SketchUp Ruby Consultant | Podium 1.x developer
          http://plugins.ro

          1 Reply Last reply Reply Quote 0
          • thomthomT Offline
            thomthom
            last edited by

            Right'o! Gotcha. Been reading more up on C and GCC.

            Thomas Thomassen β€” SketchUp Monkey & Coding addict
            List of my plugins and link to the CookieWare fund

            1 Reply Last reply Reply Quote 0
            • T Offline
              tomasz
              last edited by

              Thanks Thomas for the example.

              I do not understand what is 'extconf.rb' for. I have compiled my extension under VC++ 2008 without running the file and without using any makefile... Is it bad ? πŸ˜• πŸ’š

              Author of [Thea Render for SketchUp](http://www.thearender.com/sketchup)

              1 Reply Last reply Reply Quote 0
              • tbdT Offline
                tbd
                last edited by

                extconf.rb - external configuration, it generates the makefile to create the extension. using makefile you can automate builds and tests.

                SketchUp Ruby Consultant | Podium 1.x developer
                http://plugins.ro

                1 Reply Last reply Reply Quote 0
                • thomthomT Offline
                  thomthom
                  last edited by

                  extconf.rb generates a make file you can use with make under OSX and nmake under Windows.
                  http://ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html#UG

                  Thomas Thomassen β€” SketchUp Monkey & Coding addict
                  List of my plugins and link to the CookieWare fund

                  1 Reply Last reply Reply Quote 0
                  • thomthomT Offline
                    thomthom
                    last edited by

                    @unknownuser said:

                    I have compiled my extension under VC++ 2008

                    How big difference is making a Ruby Extension in C++ as oppose to C? ...seeing how Ruby is built in C... ❓

                    Thomas Thomassen β€” SketchUp Monkey & Coding addict
                    List of my plugins and link to the CookieWare fund

                    1 Reply Last reply Reply Quote 0
                    • T Offline
                      tomasz
                      last edited by

                      @unknownuser said:

                      extconf.rb - external configuration, it generates the makefile to create the extension. using makefile you can automate builds and tests.

                      Got it! In VC++ I have to configure it on my own.

                      @thomthom said:

                      How big difference is making a Ruby Extension in C++ as oppose to C? ...seeing how Ruby is built in C... ❓

                      You certainly would need to enclose declaration of the extension initialization with extern "C":

                      extern "C" {
                      void Init_SX_HelloWorld(); 
                      }
                      

                      I am not really an expert, but I guess all the rest would stay same.

                      Author of [Thea Render for SketchUp](http://www.thearender.com/sketchup)

                      1 Reply Last reply Reply Quote 0
                      • thomthomT Offline
                        thomthom
                        last edited by

                        Added a new example with basic functions. Will start on the tutorial text and images next.

                        Btw, does anyone know how one can make extconf.rb and make/nmake output their files to a given folder? I'd like to make it so that each platform outputs its generated files to separate directories.

                        Thomas Thomassen β€” SketchUp Monkey & Coding addict
                        List of my plugins and link to the CookieWare fund

                        1 Reply Last reply Reply Quote 0
                        • Chris FullmerC Offline
                          Chris Fullmer
                          last edited by

                          What C++ compiler or development environment are you going to write this for so I can go download it and start poking around in it?

                          Lately you've been tan, suspicious for the winter.
                          All my Plugins I've written

                          1 Reply Last reply Reply Quote 0
                          • thomthomT Offline
                            thomthom
                            last edited by

                            I am writing the extensions in C. But under windows I installed Visual C++ Express 2010 because it has the required Windows headers and nmake to compile it. I have some crude notes in the README.txt in the repo. Under OSX you need X Tools from the OSX DVD.

                            Thomas Thomassen β€” SketchUp Monkey & Coding addict
                            List of my plugins and link to the CookieWare fund

                            1 Reply Last reply Reply Quote 0
                            • thomthomT Offline
                              thomthom
                              last edited by

                              Note that I never use the Visual C++ IDE editor.

                              Thomas Thomassen β€” SketchUp Monkey & Coding addict
                              List of my plugins and link to the CookieWare fund

                              1 Reply Last reply Reply Quote 0
                              • J Offline
                                Jim
                                last edited by

                                Just wondering if there's any reason that MinGW instead of MSVC++ could not be used to compile c extensions. I assume the c extension is a libaray and doesn't require any Windows-specific GUI stuff - it's just a library of functions, right?

                                Hi

                                1 Reply Last reply Reply Quote 0
                                • Dan RathbunD Offline
                                  Dan Rathbun
                                  last edited by

                                  @thomthom said:

                                  Btw, does anyone know how one can make extconf.rb and make/nmake output their files to a given folder? I'd like to make it so that each platform outputs its generated files to separate directories.

                                  Did you check the methods defined in "mkmf.rb" ?
                                  (You can also see "Appendix C. Functions Available in extconf.rb" in the "README.EXT" file.)

                                  .. also check our the "extmk.rb" file in the ext dir.

                                  I'm not here much anymore.

                                  1 Reply Last reply Reply Quote 0
                                  • thomthomT Offline
                                    thomthom
                                    last edited by

                                    @jim said:

                                    Just wondering if there's any reason that MinGW instead of MSVC++ could not be used to compile c extensions. I assume the c extension is a libaray and doesn't require any Windows-specific GUI stuff - it's just a library of functions, right?

                                    Dunno. I'd think it'd be possible. But I really have no clue when it comes to compiling. It'd be nice to have tutorials for different compilers. So please feel free to jump on the bandwagon πŸ˜‰ )

                                    Thomas Thomassen β€” SketchUp Monkey & Coding addict
                                    List of my plugins and link to the CookieWare fund

                                    1 Reply Last reply Reply Quote 0
                                    • thomthomT Offline
                                      thomthom
                                      last edited by

                                      @dan rathbun said:

                                      Did you check the methods defined in "mkmf.rb" ?
                                      (You can also see "Appendix C. Functions Available in extconf.rb" in the "README.EXT" file.)

                                      .. also check our the "extmk.rb" file in the ext dir.

                                      Yea, got a wee bit lost... πŸ˜•

                                      Thomas Thomassen β€” SketchUp Monkey & Coding addict
                                      List of my plugins and link to the CookieWare fund

                                      1 Reply Last reply Reply Quote 0
                                      • Dan RathbunD Offline
                                        Dan Rathbun
                                        last edited by

                                        @thomthom said:

                                        Yea, got a wee bit lost... πŸ˜•

                                        I know (insert head-spinning emoticon here).

                                        Lets try these:
                                        A Simple Makefile Tutorial

                                        Makefile Tutorial

                                        I think the constant you want is DESTDIR or $(DESTDIR)

                                        I'm not here much anymore.

                                        1 Reply Last reply Reply Quote 0
                                        • thomthomT Offline
                                          thomthom
                                          last edited by

                                          πŸ‘

                                          Will have a look. Currently when I use nmake I get some warning about some of the compiler flags. Maybe I can eliminate them. I'd prefer that so there's less noise coming from the compiler. Easier to spot other warnings.

                                          ( That first link is sightly messed up though, as they didn't escape angle brackets inside the code examples: #include <hellomake.h> eaten by the browser - at least under Firefox.

                                          I've come across a partial documentation of mkmf: http://www.ensta-paristech.fr/~diam/ruby/online/ruby-doc-stdlib/libdoc/mkmf/rdoc/index.html

                                          Thomas Thomassen β€” SketchUp Monkey & Coding addict
                                          List of my plugins and link to the CookieWare fund

                                          1 Reply Last reply Reply Quote 0
                                          • J Offline
                                            Jim
                                            last edited by

                                            @thomthom said:

                                            Dunno. I'd think it'd be possible. But I really have no clue when it comes to compiling. It'd be nice to have tutorials for different compilers. So please feel free to jump on the bandwagon )

                                            I could not get MinGW working using Ruby 1.8.6. I could get the examples to compile using Ruby 1.9.3, but they just crashed SketchUp.

                                            But both example seem to compile and work just fine in SketchUp using VC++ Express and Ruby 1.8.6 per your instructions in the Readme file.


                                            0120.png

                                            Hi

                                            1 Reply Last reply Reply Quote 0
                                            • 1
                                            • 2
                                            • 3
                                            • 4
                                            • 5
                                            • 8
                                            • 9
                                            • 1 / 9
                                            • First post
                                              Last post
                                            Buy SketchPlus
                                            Buy SUbD
                                            Buy WrapR
                                            Buy eBook
                                            Buy Modelur
                                            Buy Vertex Tools
                                            Buy SketchCuisine
                                            Buy FormFonts

                                            Advertisement