2020-02-09 00:26:21 +00:00
/*
* meli - build . rs
*
* Copyright 2020 Manos Pitsidianakis
*
* This file is part of meli .
*
* meli is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* meli is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with meli . If not , see < http ://www.gnu.org/licenses/>.
* /
2020-06-20 20:28:50 +00:00
extern crate proc_macro ;
extern crate quote ;
extern crate syn ;
mod config_macros ;
2020-02-09 00:26:21 +00:00
fn main ( ) {
2020-02-09 18:46:39 +00:00
println! ( " cargo:rerun-if-changed=build.rs " ) ;
2023-07-03 11:59:37 +00:00
println! ( " cargo:rerun-if-changed=src/conf/.rebuild.overrides.rs " ) ;
2020-06-20 20:28:50 +00:00
config_macros ::override_derive ( & [
( " src/conf/pager.rs " , " PagerSettings " ) ,
( " src/conf/listing.rs " , " ListingSettings " ) ,
( " src/conf/notifications.rs " , " NotificationsSettings " ) ,
( " src/conf/shortcuts.rs " , " Shortcuts " ) ,
( " src/conf/composing.rs " , " ComposingSettings " ) ,
( " src/conf/tags.rs " , " TagsSettings " ) ,
( " src/conf/pgp.rs " , " PGPSettings " ) ,
] ) ;
2020-02-09 00:26:21 +00:00
#[ cfg(feature = " cli-docs " ) ]
{
2023-04-30 16:39:41 +00:00
use flate2 ::{ Compression , GzBuilder } ;
2022-09-11 12:19:40 +00:00
const MANDOC_OPTS : & [ & str ] = & [ " -T " , " utf8 " , " -I " , " os=Generated by mandoc(1) " ] ;
2023-04-30 16:39:41 +00:00
use std ::{ env , fs ::File , io ::prelude ::* , path ::Path , process ::Command } ;
2022-09-06 18:41:26 +00:00
2020-02-09 00:26:21 +00:00
let out_dir = env ::var ( " OUT_DIR " ) . unwrap ( ) ;
let mut out_dir_path = Path ::new ( & out_dir ) . to_path_buf ( ) ;
2022-09-06 18:41:26 +00:00
let mut cl = | filepath : & str , output : & str | {
out_dir_path . push ( output ) ;
let output = Command ::new ( " mandoc " )
. args ( MANDOC_OPTS )
. arg ( filepath )
. output ( )
. or_else ( | _ | Command ::new ( " man " ) . arg ( " -l " ) . arg ( filepath ) . output ( ) )
2022-11-11 18:08:00 +00:00
. expect (
2023-04-30 16:39:41 +00:00
" could not execute `mandoc` or `man`. If the binaries are not available in \
the PATH , disable ` cli - docs ` feature to be able to continue compilation . " ,
2022-11-11 18:08:00 +00:00
) ;
2020-02-09 00:26:21 +00:00
2022-11-24 17:58:23 +00:00
let file = File ::create ( & out_dir_path ) . unwrap_or_else ( | err | {
panic! ( " Could not create file {} : {} " , out_dir_path . display ( ) , err )
} ) ;
2022-09-06 18:41:26 +00:00
let mut gz = GzBuilder ::new ( )
. comment ( output . stdout . len ( ) . to_string ( ) . into_bytes ( ) )
. write ( file , Compression ::default ( ) ) ;
gz . write_all ( & output . stdout ) . unwrap ( ) ;
gz . finish ( ) . unwrap ( ) ;
out_dir_path . pop ( ) ;
} ;
2020-02-09 00:26:21 +00:00
2022-09-06 18:41:26 +00:00
cl ( " docs/meli.1 " , " meli.txt.gz " ) ;
cl ( " docs/meli.conf.5 " , " meli.conf.txt.gz " ) ;
cl ( " docs/meli-themes.5 " , " meli-themes.txt.gz " ) ;
cl ( " docs/meli.7 " , " meli.7.txt.gz " ) ;
2020-02-09 00:26:21 +00:00
}
}